Tamam, kulağa garip geliyor, ancak kod çok basit ve durumu iyi açıklıyor.
public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role)
{
AssertNotDisposed();
var roles = await GetRolesForUser(user);
roles.Roles = RemoveRoles(roles.Roles, role);
await Run(TableOperation.Replace(roles));
}
(Aşağıdaki özette biraz bahsettiğimi biliyorum, ama yukarıdaki gerçek üretim kodunun ne olacağından gerçek bir yöntem. zaman uyumsuz / beklemede bir doğruluk için.)
async/ awaitDaha fazla kullandığım için bu model ile daha sık karşılaşıyorum . Desen aşağıdaki olay zincirinden oluşur:
- Çalışmam gereken bazı bilgileri bana getiren ilk aramayı bekliyor
- Bu bilgiler üzerinde eşzamanlı çalışma
- Güncellenmiş çalışmayı kaydeden son bir çağrı beklemek
Yukarıdaki kod bloğu genellikle bu yöntemleri işleme hakkında nasıl olduğunu. Ben awaitbunu asenkron olduğundan gereken ilk çağrı. Sonra, IO veya kaynak bağlı olmayan ve bu nedenle zaman uyumsuz olmayan yapmam gereken işi yapıyorum. Sonunda, aynı zamanda bir asyncçağrı olan işimi saklıyorum ve kargo kültünden çıkarıyorum await.
Ancak bu, bu modeli ele almanın en etkili / doğru yolu mu? Bana öyle geliyor ki awaitson çağrıyı atlayabilirim , ama başarısız olursa? Eşzamanlı çalışmamı orijinal çağrı ile zincirlemek için bir Taskyöntem kullanmalı ContinueWithmıyım? Şu anda bunu doğru bir şekilde ele alıp almadığımdan emin olmadığım bir noktadayım.
Örnekteki kod verildiğinde, bu async / sync / async yöntemi çağrı zincirini işlemenin daha iyi bir yolu var mı?