Stephen Toub (MSFT) tarafından yapılan bir yayına göre, devlet verilerini geçmek için kapatmaya güveneceğimizi varsayıyorlar. aynı zamanda imza belirsizliği ile ilgili bir bahane de vardı (http://social.msdn.microsoft.com/Forums/en/parallelextensions/thread/1988294c-de41-476a-a104-aa550b7409f5)
Ancak, bu sorunu çözmek için kapaklara güvenmek, daha iyi bir çözüm bekleyen geçici bir hacke benziyor gibi gözüküyor, ama işe yarar, ama uzun vadeli bir çözüm değil. Çoğu kez bir temsilci yöntemini eylem olarak tanımlamanın en basit yaklaşım olacağı, ancak bu, global varsayı kullanmamız gerektiği veya durum parametresi geçişinden hariç tutulduğumuz anlamına gelir.
I Hugo'nun önerilerinden biri gibi (MS forum mesajından). Hugo, TaskState türünü tanıtmayı önerdi, bu da jenerik belirsizlik sorununu aşmanın akıllıca bir yolu gibi görünüyor. - Bir Değer etrafında sadece basit bir sarıcı
public Task<T>(Action<T> function, TaskState<T> state);
public Task<T,TResult>(Func<T,TResult> function, TaskState<T> state);
ActionState null sınıfı gibi bir çok olacaktır:
Task.Factory.StartNew() imza ve Görev() gibi kurucusuna bu uygulama üyesi.
var myTask = new Task(MyMethod, new TaskState(stateInfo));
...
public void MyMethod(StateInfo stateInfo) { ... }
TaskState <> çözüm mükemmel değildir, ama bu tip döküm kapatılması güvenmek yerine çok daha iyi bir çözüm gibi görünüyor: Uygulamada, kullanarak TaskState aşağıdaki gibi görünebilir.
Evet, ancak Görev, bir görevin sonuç türünde (TResult) jeneriktir, ancak "başlangıç durumu" türünde genel değildir (yani: bir görevin girdisi). –
Frank
Öyleyse ... Task.Factory.StartNew çağrıldığında, otomatik olarak threadpool'dan bir iş parçacığı alır mı? –
@Padu: Evet, inanıyorum - farklı bir iş parçacığı kullanan kendi görev fabrikanıza sahip olmanıza rağmen, inanıyorum. –