C# 在同一任务上多次调用wait是否对性能有害

C# 在同一任务上多次调用wait是否对性能有害,c#,asynchronous,async-await,C#,Asynchronous,Async Await,在已经等待的任务上调用wait是一种不好的做法吗?这对性能有害吗 class SomeClass { string Prop1; string Prop2; } public void SomeMethod() { Task<SomeClass>[] someClassInstanceTasks = Task<SomeClass>[10]; foreach(var task in someClassInstanceTasks)

在已经等待的任务上调用wait是一种不好的做法吗?这对性能有害吗

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];
}
class-SomeClass
{ 
字符串Prop1;
字符串Prop2;
}
公共方法()
{
任务[]someClassInstanceTasks=任务[10];
foreach(someClassInstanceTasks中的var任务)
{
task=GetSomeClassInstanceAsync();
}
someClassInstanceTasks.WaitAll();
SomeClass someClassInstance=someClassInstanceTasks[0]。结果;
//或(推荐使用)
SomeClass someClassInstance=等待someClassInstanceTasks[0];
}

就个人而言,我更喜欢使用wait方法作为额外的保护措施,以防有人引入bug并弄乱WaitAll()语句。

您的具体情况下,我只使用
.Result
。没有理由等待已完成的
任务
获得结果。但是,您不想等待已完成的
任务
,原因很简单,因为您需要将方法标记为
异步
,这将导致您标记所有调用该方法的方法,要么是
异步
,要么您必须实现
任务完成
,这是一个徒劳无益的过程,

我只需要省去
.WaitAll()
在您的示例中。如果您仍然等待每个任务,则没有必要这样做。这取决于结果是否独立。您应该等待
WaitAll
…您将返回一个结果数组,而不是任务数组。您可能不应该首先使用
task.WaitAll
。对不起,我把
WaitAll
whalll
。我想知道@StephenCleary是否建议后者。我们知道这是一个控制台应用程序吗?在ASP.NET中调用
。Result
会导致死锁。任务已完成。由于
WaitAll
,它已经有了结果。对已完成的
任务调用
。Result
不会阻止任何内容。这可能没问题,因为那里有
WaitAll
,但我认为这为以后查看代码的人树立了一个坏的先例,也就是说,有人说,“我可以使用
。Result
,“但不包括
WaitAll
。它肯定没问题,因为
WaitAll
在那里。您不能仅仅为了参数而忽略调用.Result OK的关键代码部分。