例如,考虑:
public class Student
{
public async Task Run()
{
var rand = new Random();
while (true)
{
await ReadBook();
await Task.Delay(rand.Next(4000));
}
}
public async Task ReadBook()
{
// ...
}
}
class Main
{
async Task Run()
{
var s1 = new Student();
var s2 = new Student();
s1.Run();
s2.Run();
while (true)
{
Console.WriteLine("Books read: {0}", GetReadBooks());
await Task.Delay(10000);
}
}
int GetReadBooks()
{
return 1;
}
}
我是否需要等待Student.Run()
,或者甚至维持对返回任务的引用?我理解是否有必要取消任务;我怀疑我还需要等待,以便接收Student.Run()
引发的任何异常,但除此之外,我是否关心这些任务?
答案 0 :(得分:0)
两个学生可以同时读书吗?
当await
正在进行时,离开s2.Run()
意味着s1.Run()
开始。在这种情况下,您希望 s1.Run()
和s2.Run()
同时运行,因此您绝对不应该简单地编写await s1.Run();
。由于你的循环是永无止境的,等待它们除了异常之外并没有多大意义,但如果你的循环在你的真实代码中真的永无止境,我会感到惊讶。 Task
旨在表示在某些时候完成的内容。如果你能告诉它何时完成,那么你可以根据await
任务的适当位置确定。
我可能会猜测将变量中的任务保存起来,然后将await Task.WhenAll(run1, run2);
放在其后的某个位置是最合适的,但根据您的实际代码,它可能不适合您。