17,740
社区成员
发帖
与我相关
我的任务
分享
private async void Check()
{
List<Task> data = new List<Task>();
for (int i = 0; i < 8; i++)
{
data.Add(Task.Run(() =>
{
#region 处理图像
#endregion
}));
data.Add(Task.Run(() =>
{
#region 处理数据
#endregion
}));
}
Task.WaitAll(data.ToArray());
}
private async void Check()
{
List<Task> data = new List<Task>();
for (int i = 0; i < 8; i++)
{
data.Add(Task.Run(() =>
{
#region 处理图像
#endregion
}));
data.Add(Task.Run(() =>
{
#region 处理数据
#endregion
}));
}
foreach (var item in data)
{
await item;
}
}
await Task.WaitAll(tasks);
这类代码来“等待”任务全都完成之后,回调这个 await 左边(下边)的汇合点继续执行。这里并不阻塞。
所以 PLinq 那么高大上的好东西,因为有阻塞机制,跟 Task 框架相比显得有点低端了。await task1.RunSomething();
这是一个异步回调过程,或者说是一个(某某事情做完了)事件驱动后续任务的设计,并不是什么”死循环+阻塞“设计。
但是有一些初学者,只会用”线程+死循环+阻塞“的来模拟的事件回调或者异步,看起来逻辑简单粗暴,而一旦写代码和调试就发现是极其复杂和混乱的了,大量代码都在那里纠结什么信号锁之类的机制。
实际上从一开始,就应该学会异步Task设计。