在我正在构建的 .NET Core asp.net Web 应用程序中,任务是在请求中启动的;在某些情况下,我们希望在另一个请求中等待此任务的完成。
为此,我放置了一个静态字典来存储对这些任务的引用:
public static volatile Dictionary<int, Task> MyTasks = new Dictionary<int, Task>();
如有必要,等待来自不同请求的正在运行的任务:
public static async Task GenerateMyData(int itemId, SomeOtherData data)
{
var curTask = MyTasks.Get(itemId); //<- extension method wrapper for TryGetValue
if (curTask != null && !curTask.IsCompleted)
{
await curTask;
}
var newTask = Task.Run(async () =>
{
AddPrimaryData(itemId, data);
await AddImageData(itemId, data);
MyTasks[itemId] = null;
});
MyTasks[itemId] = newTask;
}
虽然它在我的开发环境中以及在轻负载下作为 web 应用程序工作,但我对 async/await 的了解越多,我就越不确定它是否会在较重的负载下按预期运行。这种方法对于 asp.net core 2.1 Web 应用程序似乎是安全的吗?