我有一个 asp.net 应用程序,用户可以在其中按下按钮来启动长时间运行的操作,并且可以多次这样做。每次他们这样做时,我都想将创建的任务添加到列表中,以便稍后,当他们想要进入下一页时,该页面会等待列表中的所有任务完成后再重定向。
我有以下结构:
private List<Task> tasks = new List<Task>();
private SemaphoreSlim mutex = new SemaphoreSlim(1, 1);
// Simulate some work
private async Task MyWork()
{
int t = 0;
while (t < 5)
{
await Task.Delay(TimeSpan.FromSeconds(5));
t ++;
}
}
// Called in the button's eventhandler
public void DoWork()
{
mutex.Wait();
this.tasks.Add(Task.Run(() => MyWork());
mutex.Release();
}
调试时我发现每次 DoWork 访问任务列表时,当任务被添加到列表时列表是空的,似乎每次都创建一个单独的列表实例。另外,当我稍后以另一种方法访问该列表时,该列表在那里是空的。
为什么会发生这种情况,而不是将每个任务都添加到同一个列表实例中?
慕的地10843
相关分类