等待线程安全吗?似乎 Task 类是线程安全的,所以我想等待它也是线程安全的,但我没有在任何地方找到确认。线程安全也是自定义等待器的要求 - 我的意思是 IsCompleted、GetAwaiter 等方法?即,如果这些方法不是线程安全的,那么 await 会是线程安全的吗?但是,我不希望很快需要自定义等待者。
用户场景示例:假设我有一个异步返回结果的后台任务,然后从多个线程中使用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace scratch1
{
class Foo
{
Task<int> _task;
public Foo()
{
_task = Task.Run(async () => { await Task.Delay(5000); return 5; });
}
// Called from multiple threads
public async Task<int> Bar(int i)
{
return (await _task) + i;
}
}
class Program
{
public static void Main(string[] args)
{
Foo foo = new Foo();
List<Task> tasks = new List<Task>();
foreach (var i in Enumerable.Range(0, 100))
{
tasks.Add(Task.Run(async () => { Console.WriteLine(await foo.Bar(i)); }));
}
Task.WaitAll(tasks.ToArray());
}
}
}