-Code Verträge einfach behandelt Aufgaben wie wäre es mit jeder anderen Variablen, statt asynchron auf das Ergebnis warten. Das folgende Szenario funktioniert daher nicht und verursacht eine Contracts-Ausnahme, da die Methode zu dem Zeitpunkt zurückkehrt, zu der die Methode zurückkehrt. Es ist eine unvollständige Task, und die Ergebnisse werden zu diesem Zeitpunkt nicht festgelegt. Gibt es eine sinnvolle Problemumgehung für das folgende Szenario?-Code Verträge und Aufgaben
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; }));
}
Irgendwelche Vorschläge geschätzt. :) Ich würde lieber nicht die Vertragsmuster brechen.
was ist mit 'Task.WaitAll()' statt 'WhenAll()' ? – Claies
Das bricht die Asynchronität. Der einzige Weg, die Asynchronität nicht zu durchbrechen, scheint sie in zahlreiche Methoden aufzuteilen. –
aber die Art, wie Sie es beschreiben, ist es sowieso nicht Async? die C# 'Task' Klasse hat vor dem Asynchron/erwarten Merkmale gegeben, und zeigen nicht immer, dass die Methoden, sie sollen mit Async sein ... – Claies