我正在尝试使用 Trace.CorrelationManager.ActivityId 来关联日志条目。但是,我发现这段代码何时完成:
var result = await Task.Run(() => LongRunningMethod());
ActivityId 与输入时的内容不同。虽然在 LongRunningMethod() 中它是正确的(我在方法中有各种跟踪事件),但它似乎只在等待完成时才会改变。
我的问题是为什么 ActivityId 改变了?
这行代码在一个用 async 声明的函数中,该函数又由 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”同时异步启动,然后等到全部完成。