提问者:小点点

这个Async/Await代码是否可以使用Task.WhenAll(…)或其他比每次等待更有意义的东西重写?[副本]


null

null

public async void SendSeveralRequestsAsync(MyClass myClass)
{
   var client = SomeExternalServiceClient();

   foreach(var item in myClass)
   {
        var singleAsyncRequest = new ExternalServiceRequest()
        {
            Value = item.Value
        };

        var response = await client.SendAsync(singleAsyncRequest);
   }
}

共1个答案

匿名用户

是的,您应该能够使用类似于:

public async void SendSeveralRequestsAsync(MyClass myClass)
{
   var client = SomeExternalServiceClient();
   var tasks = myClass
       .Select(item => new ExternalServiceRequest { Value = item.Value })
       .Select(request => client.SendAsync(request));
   await Task.WhenAll(tasks);
}

或者可能更好--因为我不喜欢从异步方法返回,而不是针对事件:

public Task SendSeveralRequestsAsync(MyClass myClass)
{
   var client = SomeExternalServiceClient();
   var tasks = myClass
       .Select(item => new ExternalServiceRequest { Value = item.Value })
       .Select(request => client.SendAsync(request));
   return Task.WhenAll(tasks);
}