olarak beni bir görevi geçme:, işte bu mümkün olup olmadığı emin değilim parametre
Ben
async Task MethodA(...)
{
// some code
// a call to specific Async IO bound method
// some code
}
vardır da MethodB()
, MethodC()
vb birden gerçekleştirmek için bir eylem dizisini var ve tüm spesifik olarak Async IO bağlı yöntemine yapılan çağrı haricinde tamamen aynı koda sahiptir. Bir yöntem işaretçisini bir yönteme iletmenin bir yolunu bulmaya çalışıyorum, böylece daha sonra bir Yöntem() içinde yürütebiliriz.
Ne ben şu anda yapıyorum şudur:
private async Task Method(Func<Task<Entity>> func)
{
// some code
var a = await task.Run(func);
// some code
}
var task = async() => await CallToIOBoundTask(params);
Method(task);
Bu kod, ancak, GÇ bağlı görev için gerekli değildir, yeni bir iş parçacığı her seferinde çeker ve kaçınılmalıdır.
Yani, ThreadPool iş parçacığı kullanılmaması için kodu yeniden kodlamanın bir yolu var mı? Farklı IO çağrıları farklı yöntem imzaları olduğunu belirtmeye gerek de önemlidir
private async Task Method(Task<Entity> task)
{
// some code
var a = await task;
// some code
}
: Hedef Böyle bir koda sahip olmaktır. Ayrıca, bir görev yalnızca Method()
gövdesinde yürütülmeye başlayabilir ve daha önce değil. Tabii
Başlamak için async görevi için Yöntem() yöntemindeki ifadeye kadar beklemek istiyor musunuz? Eğer öyleyse, o zaman sorudaki kod örneğiniz yanlış (bir tane oluşturmak yerine bir _existing_ görevini beklemek), ve daha önce sağladığınız cevap istediğiniz şeydir. Ancak, sadece "Yöntem()" yöntemi çağrılmadan önce başladığınız bir görevi beklemek istiyorsanız, bunu kolayca yapabilirsiniz: sadece e.g. Bir aramanın dönüş değerini, 'Yöntem()' yöntemine yapılan çağrınızın argümanı olarak 'CallToIOBoundTask()' olarak iletin. –
@PeterDuniho Sorunuzun bir cevabı, sorunun son cümlesidir - Görev yürütme yöntemini() yönteminde başlatmalıdır. – Goran