Mic*_*nnt 2 .net c# asynchronous task-parallel-library async-await
我最近一直在尝试async-await,但仍然无法使用一些东西.
为什么这个代码并不总是导致'100'写入控制台?
不应该
await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)
等待所有100个任务完成?
static List<int> list = new List<int>();
static void Main(string[] args)
{
NewMethod();
Console.ReadLine();
}
private async static void NewMethod()
{
var tasks = new List<Task>();
for (int i = 0; i < 100; i++)
{
tasks.Add(Func(i));
}
Console.WriteLine("Lol");
await Task.WhenAll(tasks);
Console.WriteLine(list.Count());
}
static async Task Func(int i)
{
await Task.Delay(100);
list.Add(i);
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么或是某种异步 - 等待下行?
同样如此
Task.WaitAll(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我一开始并不确定它是否相等.
有几个类似的问题,但我的例子非常简单,我在现有的答案中找不到解释.
Yuv*_*kov 11
您遇到元素数量不一致的原因是因为List<T>它不是线程安全的.
你之后await Task.Delay(100),延续,这将元素加到列表发生在任意线程池,同时,由于多任务执行.如果你切换实现使用ConcurrentBag<int>,这不会发生.
| 归档时间: |
|
| 查看次数: |
4381 次 |
| 最近记录: |