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