2010-04-22 23 views
10

kod göz önünde:İş parçacığı/BeginInvoke nedir? [Başlangıç]

class Work 
{ 
    public void DoStuff(string s) 
    { 
     Console.WriteLine(s); 
     // .. whatever 
    } 
} 
class Master 
{ 
    private readonly Work work = new Work(); 

    public void Execute() 
    { 
     string hello = "hello"; 

     // (1) is this an ugly hack ? 
     var thread1 = new Thread(new ParameterizedThreadStart(o => this.work.DoStuff((string)o)));   
     thread1.Start(hello); 
     thread1.Join(); 

     // (2) is this similar to the one above? 
     new Action<string>(s => this.work.DoStuff(s)).BeginInvoke(hello, null, null); 
    } 
} 

ayrı iplik bazı iş başlangıç ​​kolay (1) kabul edilebilir bir şekilde var mı? Daha iyi bir alternatif değilse çok takdir edilecektir.

(2) aynısını yapıyor mu? Ben

daha iyi bir anlayış :)

/Moberg bir başlangıç ​​yardımcı Umut .. ne sormak yeni iş parçacığı başlatılıp başlatılmadığını, ya tahmin

+2

güzel bir yazı burada vardır: http://ondotnet.com/pub/a/dotnet/2003 burada (2) (1) makul eşdeğer olarak görünmelidir nasıl Threads ve asenkron olmayan delegeler arasındaki nüansları açıklayan /02/24/asyncdelegates.html. –

+0

Bir iş parçacığı kadar pahalı bir şey kullanmak ve sonra Thread.Join ile boşa harcıyor * kabul edilemez. Thread ve threadpool iş parçacığı arasında seçim yapmanıza yardımcı olacak birçok kaynak var. –

cevap

9

(1) çirkin kesmek değil ama bu günlerde konu yapmanın "yolu" değil. BeginInvoke/EndInvoke, BackgroundWorker aracılığıyla Thread Pool ve .NET 4.0 Task Parallel Library aracılığıyla gitmek için yol vardır.

(2) iyi, ancak BeginInvoke ürününü bir EndInvoke ile eşleştirmeniz gerekir. Yeni Action<string>'u bir değişkene atayın ve daha sonra x.EndInvoke()'u ana iş parçacığınızda veya bir tamamlama yönteminde (BeginInvoke için 2. parametre) arayın. Uygun bir referans olarak here'a bakın.

Düzenleme:

var thread2 = new Action<string>(this.work.DoStuff); 
    var result = thread2.BeginInvoke(hello, null, null); 
    thread2.EndInvoke(result); 
İlgili konular