코드 계약은 결과를 비동기 적으로 기다리지 않고 다른 변수와 마찬가지로 처리합니다. 따라서 다음 시나리오는 작동하지 않으며 메서드가 반환 될 때 불완전한 작업이 발생하고 그 시점에서 결과가 설정되지 않기 때문에 계약 예외가 발생합니다. 다음 시나리오에 대한 합리적인 해결 방법이 있습니까?코드 계약 및 작업
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; }));
}
모든 의견을 환영합니다. :) 나는 계약 패턴을 깨뜨리지 않을 것입니다.
무엇'Task.WaitAll()'대신'WhenAll()'의 사용에 대한 ? – Claies
비동기가 깨집니다. 비동기를 깨뜨리지 않고 유일한 방법은 그것을 여러 가지 방법으로 나누는 것 같습니다. –
하지만 설명하는대로 비동기가 아닙니다. C#'Task' 클래스는 async/await 기능 이전에 존재했으며, 이들을 사용하는 메소드가 Async ...가되도록 의도 된 것은 아닙니다. – Claies