Kod anlaşmaları, sonuçları eşzamansız olarak beklemek yerine Görevleri diğer değişkenlerle olduğu gibi ele alır. Bu nedenle, aşağıdaki senaryo işe yaramaz ve yöntemin geri döndüğü, tamamlanmamış bir görev olduğu ve sonuçların zaman içinde o zamana ayarlanmayacağı zamandan beri bir Sözleşme istisnasına neden olmaz. Aşağıdaki senaryo için makul bir çözüm var mı?Kod Sözleşmeleri ve Görevleri
public Task LoadAppModel()
{
Contract.Ensures(app.User != null);
Contract.Ensures(app.Security != null);
Contract.Ensures(app.LocalSettings != null);
return Task.WhenAll(
store.GetUserAsync().ContinueWith(t => { app.User = t.Result; }),
store.GetSecurityAsync().ContinueWith(t => { app.Security = t.Result; }),
store.GetLocalSettingsAsync().ContinueWith(t => { app.LocalSettings = t.Result; }));
}
Herhangi bir öneri takdir edilecektir. :) Sözleşme kalıplarını kırmamayı tercih ederim.
Ne 'Task.WaitAll()' yerine 'WhenAll()' kullanımı hakkında ? – Claies
Bu, asenkronizasyonu bozar. Asynchony'i bozmadan tek yol, onu çeşitli yöntemlere bölüyor gibi görünüyor. –
ama tarif etme şekliniz, Async değil midir? C# 'Task' Sınıfı, async/await özelliklerinden önce varoldu ve her zaman bunları kullanan yöntemlerin Async ... – Claies