每次運行以下麥克異常被捕獲。是當所有順序或併發?
是WhenAll順序涉及各個任務之間的連續上下文或做得到同時運行所有任務?如果這是同時發生的,爲什麼麥克的例外總是被抓住,而不是米奇的。我推遲了邁克,以便給米奇一個機會。如果它是連續的,那麼它是如何並行的?在進行Web請求/進行文件處理時是否應用併發執行?
假設這個代碼是更嚴重的會變成這樣一個明智的做法,以異步?這種情況會有幾種方法--Jason,Mitch和Mike--在沒有阻塞的情況下同時運行,並在全部完成時繼續執行事件處理程序?我應該注意哪些有關我的天真執行異常處理的問題?有任何問題或潛在問題需要注意?
private async void button1_Click(object sender,EventArgs e)
{
try
{
AsyncJason c1 = new AsyncJason();
await c1.Hello();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
public class AsyncJason
{
public AsyncJason()
{
}
public async Task Hello()
{
var j = await GetJasonAsync();
string[] dankeSchon = await Task.WhenAll(new Task<string>[] {GetJasonAsync(), GetMikeAsync(), GetMitchAsync()});
}
private async Task<string> GetJasonAsync()
{
var result = await Task.Run<string>(() => GetJason());
return result;
}
private string GetJason()
{
return "Jason";
}
private async Task<string> GetMitchAsync()
{
var result = await Task.Run<string>(() => GetMitch());
return result;
}
private string GetMitch()
{
throw new ArgumentException("Mitch is an idiot", "none");
}
private async Task<string> GetMikeAsync()
{
await Task.Delay(3000);
var result = await Task.Run<string>(() => GetMike());
return result;
}
private string GetMike()
{
throw new ArgumentException("Mike is an idiot", "none");
}
}
當沒有辦法控制任務如何執行時(即所有任務都可以在執行完時執行)...... –