正在使用ThreadStatic并在每次等待完成“一个选项”时设置上下文?有另一种方法吗?如何在C#中通过异步等待模型维护线程上下文?
public async void Test()
{
// This is in Thread 1
Foo foo = new Foo();
Context.context = "context1"; // This is ThreadStatic
string result = await foo.CallAsynx();
// This is most likely Thread 2
Context.context = "context1"; // This might be a different thread and so resetting context
}
现在有另一种方法,如果我不想使用ThreadStatic?
你真的需要线程'ThreadStatic'吗?你可以通过'CallContext.LogicalSetData' /'LogicalGetData'来流动你的全局状态变量:http://stackoverflow.com/q/22363830/1768303 – Noseratio
或者你可以把它改成'foo.CallAsynx(context);'。这就是ASP.NET MVC的方式。 –
此外,异步不会创建新线程。我会和Paulo一起解决问题。在ASP.NET上下文中,(线程)静态是不安全的,不同的请求在线程池中运行在线程上,所以(线程)静态变量将存活,并在需求/用户之间共享。 – MarkO