Trace.CorrelationManager.ActivityIdを使用してログエントリを相互に関連付けようとしています。しかし、私はこのコードがいつ終了するかを見つけています:
var result = await Task.Run(() => LongRunningMethod());
ActivityIdは、入力されたときの状態から変更されました。LongRunningMethod()では正しいですが(メソッドにはさまざまなトレースイベントがあります)、awaitが完了したときにのみ変更されるようです。
私の質問は、なぜActivityIdが変更されたのですか?
このコード行は、非同期で宣言された関数内にあり、MVCプロジェクトの非同期コントローラーアクションによって呼び出されます。
async public Task<ActionResult> Index()
{
...
var tasks = {list of Download<T> delegates}
var result = await Task.WhenAll(tasks)
}
async public Task<OperationResult> Download<T>(IEnumerable<T> data, Device device)
{
...
var result = await Task.Run(() => LongRunningMethod());
return result
}
おそらく私はasync/awaitまたはTaskメソッドを間違って使用していますか?基本的に、すべての「LongRunningMethod」を非同期で同時に開始し、すべてが終了するまで待機する必要があります。