下面,我有代码将“任务”添加到我以后可以使用的所有当前正在运行的任务的列表中。我使用信号量来确保在列表中添加/删除没有问题,而且-仅在将任务添加到列表中之后才启动任务
我的问题是,如果我的SomeTask-包含UI操作,则我不确定解决此问题的最佳方法是什么。
List<Task> tasks = new List<Task>();
SemaphoreSlim SemaphoreSlim = new SemaphoreSlim(1, 1);
async Task Lock(Action action)
{
try
{
await SemaphoreSlim.WaitAsync();
action();
}
finally
{
SemaphoreSlim.Release();
}
}
public async Task SomeTask
{
///Some UI Operations occur here
}
public async void CreateTaskToPool()
{
var task = new Task(() => SomeTask));
await Lock(() => tasks.Add(task));
task.Start();
var control = await task;
await Lock(() => tasks.Remove(task));
}
编辑
如果您有更好的实施此任务池的其他建议,请随时提出