正在使用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