withobj
の前後にオブジェクト参照 ( ) がある単純な C# async/await コードを見てみましょう。await
ConfigureAwait(false)
private async Task<SomeObject> AnAsyncLibraryMethod(SomeObject obj)
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
obj.Name = "Harry"; // <-- obj here
// MAIN POINT
var newSubObj = await FetchOverHttpAsync().ConfigureAwait(false);
// Continuation here
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
obj.Name = "Sally"; // <-- same obj here
return obj;
}
public class SomeObject { public string Name; }
ConfigureAwait(false)
キャプチャされた元のコンテキストに継続をマーシャリングしない ことを意味するようです-わかりましたが、それは実際にはどういう意味ですか? 上記のコードを試してみたところ、正しく参照されました (別のスレッドで再開した場合でも)。obj
そのため、「コンテキスト」はスレッドの作業メモリ (つまり、スレッド ローカル ストレージ) ではないようです。では、「文脈」には何が含まれているのでしょうか。したがって、それは本当に何を意味するのでしょうか
継続をマーシャリングして、キャプチャした元のコンテキストに戻します