在同一个任务上调用多次等待性能不好

时间:2017-03-09 01:33:04

标签: c# asynchronous async-await

对已经等待的任务调用await是不好的做法吗?性能不好吗?

class SomeClass 
{ 
   string Prop1; 
   string Prop2; 
}

public void SomeMethod()
{
    Task<SomeClass>[] someClassInstanceTasks = Task<SomeClass>[10];
    foreach(var task in someClassInstanceTasks)
    {
        task = GetSomeClassInstanceAsync();
    }

    someClassInstanceTasks.WaitAll();

    SomeClass someClassInstance =  someClassInstanceTasks[0].Result;
     //OR (which is recommended)
    SomeClass someClassInstance =  await someClassInstanceTasks[0];
}

就个人而言,我更喜欢等待方法作为额外的保护措施,以防有人引入错误并使用WaitAll()声明。

1 个答案:

答案 0 :(得分:2)

您的具体案例中,我只会使用.Result。没有理由await在完成的Task上获得结果。但是,有一个原因是您不希望await完成Task,只是因为您需要标记您的方法async,这将导致您标记所有调用那个async的方法或者你必须实现TaskCompletion的方法,这是很多努力没有收获,