Android(Java)に論理コンテキストを保持するメカニズムがありますか?.NETのExecutionContext
と同様ですか?論理的なコンテキストとは、いったん保持されていた情報が、後で論理スレッドの実行中にアクセス可能であることを意味します。つまり、非同期呼び出しでも生き残ります。例:非同期呼び出しのフロー実行/論理コンテキスト
handler = new Handler();
final Runnable r = new Runnable() {
public void run() {
System.out.print(LogicalContext.get("foo")); //should print "bar"
}
};
LogicalContext.set("foo", "bar");
handler.postDelayed(r, 1000);
明確にするために、私は閉鎖について知っています。しかし私が必要とするのは、私が毎回渡したい文脈を捕らえる必要がない自動メカニズムです。私がLogicalContext.set
と呼んだときに起動する別の論理スレッドに異なるコンテキストを持たせたいのであれば、それ以降の非同期呼び出しを(基本的にはコピーすることで)コピーするようにしたいので、さらに明確にするために、 )。
C#では、それは次のようになります。それが不可能なら
CallContext.LogicalSetData("foo", "bar");
await Task.Run(() => Console.WriteLine(CallContext.LogicalGetData("foo")));
、私は、このメカニズムの特殊なケースのために解決します - 実行の現在の論理フロー/スレッドがIntentService
由来かどうかを判断します。
http://stackoverflow.com/questions/5754281/inheritable-thread-local-in-netの正反対:) –