私は次のコードを持っている:、.NET 4.0の継続タスクからタスク例外を伝播する方法はありますか。
private static Exception GetTaskException(Task t)
{
try
{
t.Wait();
return null;
}
catch (Exception exc)
{
return exc;
}
}
は何このコードはありませんが、いくつかの接続が1 DBサーバに属していてもよいDB接続の多数を通じて特定のSQL文を実行です:
innerExceptions = dbconnByServer
.AsParallel()
.WithDegreeOfParallelism(dbconnByServer.Count)
// A stream of groups of server connections proceeding in parallel per server
.Select(dbconns => dbconns.Select(dbconn => m_sqlUtilProvider.Get(dbconn)))
// A stream of groups of SqlUtil objects proceeding in parallel per server
.Select(sqlUtils => GetTaskException(sqlUtils
// Aggregate SqlUtil objects to form a single Task which runs the SQL asynchronously for the first SqlUtil, then upon completion
// for the next SqlUtil and so long until all the SqlUtil objects are processed asynchronously one after another.
.Aggregate<ISqlUtil, Task>(null, (res, sqlUtil) =>
{
if (res == null)
{
return sqlUtil.ExecuteSqlAsync(SQL, parameters);
}
return res.ContinueWith(_ => sqlUtil.ExecuteSqlAsync(SQL, parameters)).Unwrap();
})))
.Where(e => e != null)
.ToList();
他のものは - 他のものなどに。 SQL文は、利用可能なDBサーバー間で並行して実行されている
- :
コードは、2つの条件が保持されていることを確認します。
- 同じDBサーバー内では、SQL文は非同期に実行されますが、順番に実行されます。
- は、DB CONN 1
- ためのSQLを実行し、いくつかのDBサーバあたりN DB接続は、以下の効果を有する実行、凝集の終わりに単一
Task
が存在するであろう考える
- ためのSQLを実行し、いくつかのDBサーバあたりN DB接続は、以下の効果を有する実行、凝集の終わりに単一
- は、DB CONN 1
前回の処理が完了したら、db conn 2のSQLを実行してください。
- 前回の処理が完了したら、db conn 3のSQLを実行してください。
- ...前回の完了時に
- は、
私の問題は今、例外が非常に最初のDB接続のを除いて失われているということである デシベルでCONN NのためのSQLを実行します。私は_
引数を調べて、何とか継続機能内の_.Exception
プロパティを処理する必要があることを知っています。私はそれを行うためのエレガントな方法があるのだろうかと思います。
アイデア?
例外はいくつかの接続のために発生した場合、あなたは何とかそれを保存したいし、次の接続を継続し、右? – svick
また、非同期メソッドを使用するのは、結果を同期的に 'Wait()'するつもりではないと思います。 – svick