TASK1:問題有關的任務延續
public Task SendMail(string email)
{
...
}
TASK2:
public Task<int> SaveToDB(User user)
{
...
}
我需要做的:
- 時TASK1失敗,應該返回一個 「發送失敗」 信息來源;
- 當task1成功時,task2開始。
- 當task2失敗時,應該返回一個「保存失敗」信息。
- 當task2成功時,應該返回一個「保存成功」的信息。
請幫我找到一個解決方案:
public Task<string> SendAndSave(User user){
var task1 = SendMail(user.Email);
var task1Failed = task1.ContinueWith(t =>
{
var e = task1.Exception;
return "Send Failed";
},
TaskContinuationOptions.OnlyOnFaulted |
TaskContinuationOptions.ExecuteSynchronously);
var task2 = task1.ContinueWith(t =>
{
var save = SaveToDB(user);
try
{
int result = save.Result;
return "Save Succeeded";
}
catch(AggregateException ae)
{
return "Save Failed";
}
},
TaskContinuationOptions.NotOnFaulted);
return Task.Factory.ContinueWhenAny(new[] {task1Failed, task2}, t => t.Result);
}
當我運行它,我收到一個錯誤。
我調用它:
var result = SendAndSave(user).Result;
在發生錯誤:
public Task<string> SendAndSave(User user)
{
...
return Task.Factory.ContinueWhenAny(new[] {task1Failed, task2}, t => t.Result); //Here: A task was cancelled
}
調試之後,我有兩個問題:
Q1:TASK1後,task1Failed,task2被創建,每個的值爲 CreationOption屬性爲「無」,雖然其狀態爲 「WaitingForActivation」。看來所有的延續選項都是 無效。
Q2:對於Task.Factory.ContinueWhenAny的(新[] {task1Failed, TASK2},T => t.Result)的任務,讓我們將其命名爲 「factoryTask」 時, ContinueWhenAny似乎無效。在task1Failed,task2和factoryTask中的每一個的內部 中放置一個斷點後,偶爾會看到 factoryTask中的斷點首先被觸發,儘管在task1Failed或task2完成後應該觸發 。
任何人都可以幫忙嗎?謝謝。
也許你可以先告訴我們,錯誤究竟是什麼? – Carsten