Bir Oracle db sorgusu ve Active Directory sorgusu için iki ayrı görevi oluştururken ve her ikisini de beklerken herhangi bir sorun veya sorun görüyor musunuz?arka plan iş parçacığı kullanarak Task.Run
Aşağıda çok basit bir sıyrılmış örnek gösterilmektedir. Esasen, AD'den ve bir Oracle DB'den gelen bilgi parçalarından oluşturulan bir çalışan nesnesine sahibiz. (Denilen sırayla) Employee
nesne oluşturulur ve her iki sorguları araya getirilmiş ve kullanılabilir olup, bu noktada
var partialEmployeeA=ActiveDirectoryLookup(employeeID);
var partialEmployeeB=OracleDBLookup(employeeID);
var finalEmployee=Merge(partialEmployeeA,partialEmployeeB);
. Bu sorun olmadan çalıştı, ancak bu çağrıların her biri kendi göreviyse, ölçekleme bakış açısından herhangi bir sorun görürdünüz?
Employee partialEmployeeA;
Employee partialEmployeeB;
var t1 = Task.Run(() => {
partialEmployeeA=ActiveDirectoryLookup(employeeID);
});
var t2 = Task.Run(() => {
partialEmployeeB=OracleDBLookup(employeeID);
});,
Task.WaitAll(t1, t2);
var finalEmployee=Merge(partialEmployeeA,partialEmployeeB);
(başka bariz kod sorunları hariç) Ben kronometre sınıfı ve Task
sürümü ile bazı test hızlı geri geliyor her zaman yaptığımız (ort: 100-120ms 200-250ms vs) ve hiçbir problem vardır, ama degildim Çok çekirdekli bir sistemde nasıl ölçeklendiğinden emin değilsiniz. TPL ile fazla bir şey yapmadım ama bu yaklaşımı merak ediyordum.
Görevler beklemeden beklendiğinden, Task.WhenAll'i beklemekten daha iyi olmaz mıydı? Ya da daha iyisi, her iki görev de sonuç döndürdüğü için, sonuçları beklemeden “Task.WhenAll” sonucundan bir dizi olarak alamadınız mı? –
Cevap i3arnon için çok teşekkürler. Paralel seçenek olarak engellenen iş parçacıkları hakkında daha fazla bilgi verir misiniz? Bu rotayı önleyecek ya da ne zaman önleyecek olan etkilere aşina değilim. – jdross
@jdross - bkz. [MSDN: Async ve Await ile Eşzamansız Programlama] (https://msdn.microsoft.com/en-us/library/hh191443.aspx) –