c# - 使用 SemaphoreSlim 锁定 C# 任务
问题描述
下面我的代码将任务添加到我以后可以使用的所有当前正在运行的任务的列表中。我使用信号量来确保向列表添加/删除没有问题,并且我只在将任务添加到列表后才启动它
我的问题是,如果我的 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));
}
编辑
如果您有任何其他更好地实施此任务池的建议 - 请随时提出建议
解决方案
推荐阅读
- database - “字符串”不是“布尔”类型的子类型
- javascript - jQuery 'val("")' 无法绑定'paste' 以在输入字段中进行更改
- javascript - 如何在javascript中更改隐藏值?
- android - 如何在 Android Camera 1 中开启 ZSL(零快门延迟)?
- powershell - 如何通过cmd杀死powershell进程?统一远程应用
- r - 存储在反应性语句中计算的变量以供在 hist() 中使用
- java - 在 IntelliJ IDEA CTRL+SHIFT+F9 中导致:无法打包文件 IO 错误:java.io.IOException: Negative seek offset
- react-native - 如何在 i18next 中使用 postProcess?
- java - 如何使用 Aspose 和 java 替换 ppt/word 模板数据
- python - 如何忽略False,所以不算为0