この例は「失敗」します。
static async void Main(string[] args)
{
try
{
await TaskEx.Run(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
つまり、「失敗」というテキストを含む例外が発生します。
次に、この回避策を試しました:
static async void Main(string[] args)
{
try
{
await SafeRun(() => { throw new Exception("failure"); });
}
catch (Exception)
{
throw new Exception("success");
}
}
static async Task SafeRun(Action action)
{
var ex = default(Exception);
await TaskEx.Run(() =>
{
try
{
action();
}
catch (Exception _)
{
ex = _;
}
});
if (ex != default(Exception))
throw ex;
}
それも役に立ちませんでした。
Async CTP 更新のインストールがホースされている可能性があると思います。
このコードが期待どおりに機能するか (「失敗」ではなく「成功」)、またはそのように機能することが「想定」されていません。そうでない場合、どのように回避しますか?