.NET 4.0, aynisel programlama modellerini kapsüllemek için güzel Görev sınıfını içeren TPL'ye sahiptir. .NET 2.0 olması gereken bir uygulama üzerinde çalışıyorum, ancak yeniden yazma görevinden kaçınmak istiyorum. Baska öneri?.NET 2.0 Görev <T>'u ne için kullanmalıyım?
cevap
2.
Maalesef .net için ben size Görevi yeniden yazmak istemiyorum söyledi biliyorum ama Aslında bir Görev nesnesi gibi davranan kapaklar kullanarak oldukça basit bir şey yaratabilirsiniz. .
public delegate R AsyncTask<R>();
public static AsyncTask<R> BeginTask<R>(AsyncTask<R> function)
{
R retv = default(R);
bool completed = false;
object sync = new object();
IAsyncResult asyncResult = function.BeginInvoke(
iAsyncResult =>
{
lock (sync)
{
completed = true;
retv = function.EndInvoke(iAsyncResult);
Monitor.Pulse(sync);
}
}, null);
return delegate
{
lock (sync)
{
if (!completed)
{
Monitor.Wait(sync);
}
return retv;
}
};
}
Onun içinde geçmesi temsilci üzerinde BeginInvoke() çağırır ve blokları denilen ve geçirilen fonksiyonun sonucu için bekleyeceği bir işlevi döndüren bir fonksiyon Sen ediyorum: Bu benim kullandığım budur Tabii ki, farklı yöntem imzaları için bu fonksiyonun aşırı yüklenmesini oluşturmak zorunda.
Gitmenin bir yolu, bunu gereksinimlerinize göre ayarlayabilir ve Devamlar vb. Gibi başka davranışlar da ekleyebilirsiniz. Anahtar, kapatma ve anonim temsilciler kullanmaktır. .NET 2.0 çalışmalıdır.
DÜZENLEME - Burada kullanmak görecektir:
public static string HelloWorld()
{
return "Hello World!";
}
static void Main(string[] args)
{
var task = BeginTask(HelloWorld); // non-blocking call
string result = task(); // block and wait
}
System.Threading.Thread
sınıfını kullanmak zorunda olacak
, sen .net 3.5 için Task
sınıfını alabilirsiniz ama
Ben Görev sınıf I 3.5 altında kullanabiliriz nasıl .NET 4. ile geliyor izlenim oldu? –
[Rx] (http://go.microsoft.com/fwlink/?LinkID=179929) ekibi, .NET 3.5 SP1'e "Task" ve diğer düşük düzeyli soyutlamaları (tüm TPL'yi değil) destekledi. –
@Christial Schwarz,^^^Stephen'ın söylediği gibi, geri verildi. – Jethro
- 1. C# Görev Görev Zamanlayıcısı 2.0 için API
- 2. Git user.name için ne kullanmalıyım?
- 3. .NET 2.0
- 4. Hangi. Net grafik kitaplığını kullanmalıyım?
- 5. Oturum yerine ne kullanmalıyım?
- 6. com.google.appengine.repackaged * yerine ne kullanmalıyım?
- 7. std :: bind ne zaman kullanmalıyım?
- 8. sscanf yerine ne kullanmalıyım?
- 9. Birden çok görüntüyü saklamak için ne kullanmalıyım?
- 10. csv dışa aktarımı için nongoose'da ne kullanmalıyım
- 11. .NET 2.0 ile SAML
- 12. "Bitmeyen" bir görev tekrarı için hangi OTP davranışını kullanmalıyım?
- 13. .net 2.0 IRC bileşeni
- 14. ImageButton veya Button'ı ne kullanmalıyım?
- 15. Ne zaman görev sayısı
- 16. "-U" seçeneği pip kurulumunda ne anlama gelir? -U
- 17. Perl'de printf yerine ne kullanmalıyım?
- 18. _aligned_malloc() işlevini ne zaman kullanmalıyım?
- 19. PowerShell Görev kimlik bilgileri ne için kullanılır?
- 20. .NET 2.0, .NET 3.5 yükleyicisine dahil mi?
- 21. .NET için COM toplamada hangi toplama arabirimini kullanmalıyım?
- 22. Android Market için Anahtar Depomuzda "Distinguished Name" için ne kullanmalıyım?
- 23. .NET 4 Görev Sınıfı Eğitimi
- 24. alan tespit .net çekirdek 2.0
- 25. Görev kullanırken ThreadPool dolu/meşgulse ne olur?
- 26. Tamamlanan bir görev oluşturma <T>
- 27. AddEntityFrameworkStores yalnızca .NET Core 2.0
- 28. .Net çerçeve 2.0 Yapılandırma Aracı
- 29. Bu yansıma kodunda ne var? GetFields() İşte</p> <p>2.0 kod boş bir dizi Net
- 30. C++ 14 Constexpr ne sıklıkla kullanmalıyım?
Teşekkürler Sean. Bu iyi bir başlangıç noktasıdır. –
Kodda yürürlüğe giren herkes için, yukarıda kullanıldığı şekliyle BeginInvoke, [işlenen yönetilen iş parçacığından yeni bir iş parçacığı] üzerinde HelloWorld'ü başlattığını unutmayın (http://stackoverflow.com/questions/3556634/does-funct-begininvoke-use-the-threadpool). – rkagerer