让我们想象一下这样的代码:
private static readonly ThreadLocal<int> MyInt = new ThreadLocal<int>(() => 3);
DoSomething()
{
var A = DoSomethingElse()
MyInt += A;
}
因此,每个线程都会有一个 MyInt 的副本。
但如果我们这样做:
private static readonly ThreadLocal<int> MyInt = new ThreadLocal<int>(() => 3);
async DoSomething()
{
var A = await DoSomethingElse();
MyInt += A.Result();
}
当执行从await调用恢复时,我们是否可能处于另一个线程中并且MyInt += A会将A添加到错误的MyInt?
最佳答案
是的,不能保证执行会在同一线程上恢复。但你可以使用 AsyncLocal 代替
https://msdn.microsoft.com/en-us/library/dn906268(v=vs.110).aspx
关于C#/.Net 使用 ThreadLocal 和 Async/Await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973599/