C#/.Net 使用 ThreadLocal 和 Async/Await

标签 c# .net async-await

让我们想象一下这样的代码:

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/

相关文章:

c# - 如何获得类型的完整 C# 声明?

c# - Web API 发布反序列化 json 结果但所有属性为空

c# - 在asp.net中控制对站点的权限

c# - 如何读取json数据

c# - system.Threading.Tasks.Task 方法中的代码不是 "Finish"

c# - 异常,在 WinRT 中加载文件后

c# - Azure Blob TIFF 到 PNG 转换,无需下载

带有其他参数的 C# HttpClient Post 字符串数组

c# - .NET 的单点登录

javascript - promise 异步/等待