Aşağıdaki kod var:.NET 4.0'daki devam görevinden görev istisnasını nasıl yaymalıyım?
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();
Nerede:
private static Exception GetTaskException(Task t)
{
try
{
t.Wait();
return null;
}
catch (Exception exc)
{
return exc;
}
}
Ne bu kod yapar bazı bağlantıları bir DB sunucusuna ait olabilir db bağlantılarının çok sayıda genelinde belirli bir SQL deyimini yürütmek olduğunu diğerleri ise - diğerine vb.
kodu iki koşul tutun emin olur:
- ifadeleri mevcut DB sunucular arasında paralel olarak yürütülen SQL.
- Aynı DB sunucusunda, SQL deyimleri sıralı olarak değil, senkronize olarak çalıştırılır.
yürütme agregasyon sonunda tek Task
, olacak bir DB sunucu başına db bağlantıları göz önüne alındığında, bunu takiben bir etkiye sahiptir:
- db bağl SQL Yürütme 1
- önceki tamamlanmasıyla, önceki tamamlanmasının ardından db baðlant 2
- için SQL çalıştırmak db baðlant 3
- için SQL çalıştırmak ... Önceki tamamlanmasının ardından
- ,
Sorunum şu anda istisnalar ilk db bağlantısı haricinde kaybı olmasıdır
- önceki tamamlanmasıyla, önceki tamamlanmasının ardından db baðlant 2
_
argümanını incelemek ve bir şekilde devamı fonksiyonunda
_.Exception
özelliğini işlemek. Bunu yapmak için şık bir yol olup olmadığını merak ediyorum.
Herhangi bir fikrin var mı?
Yani, aşağıdaki bağlantıları ile devam sonra bir şekilde saklamak istiyorum ve, sağ? – svick
Ayrıca, eşzamanlı olarak "Wait()" sonucuna gidecekseniz, asenkron yöntem kullanmanın çok mantıklı olduğunu düşünmüyorum. – svick