async
anahtar sözcüğü aslında, devralınan yöntem imzasının bir parçası değildir, ancak derleyiciye, async yöntemlerinin modeline göre yöntemi derlemek ve yeniden yazmak için gereken bir sinyaldir.
Bu şekilde, miras alınan yöntem await
anahtar sözcüğünü kullanmıyorsa, devralınan yöntemlerde async
anahtar sözcüğünü dışarıda bırakabilirsiniz. Hala geri dönmek zorunda kalacak
Note Task
veya Task<T>
, o kısım kalıtsal yöntem imzasının parçasıdır.
Uyarı:
class Base
{
public virtual async Task<int> Method()
{
await Task.Delay(10);
return 42;
}
}
class Derived : Base
{
// next line produces warning
public override async Task<int> Method()
{
return 42;
}
}
uyarı şudur:
Yani bu size bir uyarı verecektir Bu zaman uyumsuz yöntem yoksun CS1998 operatörleri 'bekliyor' ve eşzamanlı çalışacaktır. Bloke edilmeyen API çağrılarını beklemek için
await
operatörünü kullanmayı veya arka plan iş parçacığına CPU bağlı çalışmayı yapmak için
await Task.Run(...)
kullanmayı düşünün.
async
kelime getirdiği "sihirli" bir kısmı otomatik tamamlamayı çünkü bu son yöntemde
return
ifadeyi değiştirdi
class Derived : Base
{
public override Task<int> Method()
{
return Task.FromResult(42);
}
}
Not:
Ancak bu, bir uyarı üretmek olmaz Task<T>
içinde dönüş değeri. Task<T>
'u elde etmenin başka yollarına sahipseniz, açıkçası yukarıdaki gibi yaptığım gibi bir sonuç almanıza gerek yoktur.
Soruyu anlamıyorum. "async", devralınan yöntem imzasının bir parçası değildir. "Beklemeyi" kullanmayan geçersiz kılınan bir yöntemi bildirirken "async" yazmayın. Yine de bir 'Görev' veya 'Görev' döndürmeniz gerekecek. Sorunu ve gerçek uyarıyı gösteren bazı kodlar yayınlamalısınız, böylece yaşadığınız asıl sorun hakkında hiçbir karışıklık olmamalıdır. –
Yöntem bekletme anahtar sözcüğünü kullanmıyorsa async anahtar sözcüğünü katılamıyor musunuz? – Stefan
bulduklarınızın bazı örnekleri, daha iyi bir soru yapmalıdır. –