在C#中的单个调用中进行多个异步调用

Uts*_*sav 2 c# asynchronous async-await c#-4.0 asp.net-web-api

我想在一次调用中进行多次异步调用而不使用循环.例如,我想传递一个URI列表,并在一次调用中异步检索所有这些URI.这可能通过C#?

这是Java中的一个例子,它做了类似于我正在寻找的东西.

Jon*_*eet 6

您可以非常轻松地获得任务列表 - 例如:

var tasks = uris.Select(async uri =>
            {
                using (var client = new HttpClient())
                {
                    return await client.GetStringAsync(uri)
                }
            })
            .ToList();
Run Code Online (Sandbox Code Playgroud)

请注意,如果要使用async/await,则需要C#5,而不是C#4.如果使用Microsoft.Bcl.Async Nuget包,仍可以使用.NET 4.0 ,但必须使用C#5编译器.

  • 您可能想尝试重用`HttpClient`实例.我觉得它被设计了. (3认同)