タスクから例外処理を実装しようとしていますが、それを正しく取得できないようです。私はパターンのいくつかの例を見つけましたが、何を試しても、私はいつもタスク自体から未処理の例外を得るようです。私は何かが欠けているに違いないが、何が見えないのか。どんな助けも非常に高く評価されるでしょう。非同期/未処理の例外をスローすることを待ちます
は、私は、MSDNで見つけ例を試してみたが、それは私のために動作しません:
https://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx
そして、私はこの質問への答えを追ったが、私は、Visual Studioで修正を実行すると、それ
:これは私が最初に書いたコードである:まだ未処理の例外について不平を言います
static void Main(string[] args)
{
TestAsync().ContinueWith(t =>
{
Console.WriteLine(t.Exception.ToString());
}, TaskContinuationOptions.OnlyOnFaulted);
Console.ReadKey();
}
static async Task<IEnumerable<string>> TestAsync()
{
IEnumerable<string> list = null;
try
{
list = await TestTask();
}
catch (Exception)
{
Console.WriteLine("Caught!");
}
return list;
}
static Task<IEnumerable<string>> TestTask()
{
var task = new Task<IEnumerable<string>>(() =>
{
throw new AggregateException("This is a test");
});
task.Start();
return task;
}
私は完全にはっきりしていません - 何が起こると思いますか?私が見るのは、スロー、キャッチ、再スローのパスだけです。それは例外を扱いません。 –
お返事ありがとうございます。私は、TestTask()でスローされた例外が、返されるタスクのExceptionプロパティで終わることを期待していましたが、この例をVisual Studioで実行すると、TestTask()のスローが強調表示され、未処理の例外です。私はMSDNの例も同じことをしていたことに驚いていました。 –
サンプルコードを更新して、私がもう少しやろうとしていることを示しました。 –