我想使用Trace.CorrelationManager.ActivityId关联日志条目。但是,当代码结束时,我发现:await Task.Run退出跟踪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
}
也许我现在用的是异步/坐等或工作方法不当?我基本上希望所有'LongRunningMethod'异步启动,然后等到所有完成。
什么问题? – svick
你使用.NET 4.5吗? –
问题是ActivityId为什么会改变。 是的,使用.NET 4.5 – user380689