Bir Windows 8 projesi için bir async hizmeti ile etrafta dolaşıyorum ve bu hizmetin bazı async çağrıları vardır, bunlar sadece bir kerede bir kez çağrılmalıdır. Bir Görevde birden fazla bekçisi olabilir mi?
public async Task CallThisOnlyOnce()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
Bir kilit açıklamada bir zaman uyumsuz çağrı encapsulate olamayacağına göre
iAsyncLock
kalıbı kullanarak düşündüm ama düşündüğümden daha ben de böyle bir şey deneyebilirsiniz: Dolayısıyla
private Task _callThisOnlyOnce;
public Task CallThisOnlyOnce()
{
if(_callThisOnlyOnce != null && _callThisOnlyOnce.IsCompleted)
_callThisOnlyOnce = null;
if(_callThisOnlyOnce == null)
_callThisOnlyOnce = CallThisOnlyOnceAsync();
return _callThisOnlyOnce;
}
private async Task CallThisOnlyOnceAsync()
{
PropagateSomeEvents();
await SomeOtherMethod();
PropagateDifferentEvents();
}
sen olur Yalnızca bir kez simultane bir şekilde yürütülen CallThisOnlyOnceAsync
numaralı çağrıyla sona erdirilir ve aynı görevde birden fazla bekletici de bağlanır.
Bu "geçerli" bir yöntem midir, yoksa bu yaklaşımın bazı dezavantajları var mı?
Her iki cevabı da beğendim, ancak bir uygulama önerisi eklediğiniz için sizinkini seçtim. Ayrıca, kitaplığınızı Nuget kullanarak yüklemeyi denedim, ancak Windows Mağazası projemde başarısız oldu (Microsoft.Bcl.Async dosyasını çözemedi) – UrbanEsc
"Prerelease dahil" onay kutusunu işaretlemeyi deneyin. Paketim yayın öncesi (ancak NuGet bunu doğru olarak algılamıyor) ve 'Microsoft.Bcl.Async' de (NuGet'in doğru şekilde algıladığı) yayın öncesidir. –