3
如果我关闭多个异步Web请求,是否可以将结果附加到全局变量(例如StringBuilder
)?我知道订单不能保证。异步方法中的StringBuilder
这是否会导致很多任务阻塞?
这是安全吗?
private static StringBuilder sb = new StringBuilder();
private static async Task AccessTheWebAsync()
{
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(@"http://www.google.com/");
sb.Append(response.StatusCode).Append(Environment.NewLine);
}
static void Main(string[] args)
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
tasks.Add(AccessTheWebAsync());
Task.WaitAll(tasks.ToArray());
Console.Write(sb.ToString());
Console.ReadLine();
}
[您可以添加同步上下文到您的控制台应用程序,如果你这么倾向](http://blogs.msdn.com/b/pfxteam/archive/2012/02/02/await-synchronizationcontext-and-控制台应用程序,部分3.aspx)。 – Servy
这是我猜想的更多后续行动。那么它会更合乎逻辑,可能会使签名'私有静态异步任务 AccessTheWebAsync()'返回'response.StatusCode',然后最后在'WaitAll'循环后面并附加所有'Result's? –
user17753
@ user17753是的,实际上,这可能会更好。 – Servy