Понимание Thread/BeginInvoke? [новичок]

Рассмотрите код:

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);
    }
}

(Действительно ли 1) приемлемый способ легкого запуска некоторой работы в отдельном потоке? Если бы не лучшая альтернатива очень ценилась бы.

(2) делает то же? Я предполагаю то, что я спрашиваю, то, если новая дискуссия начата, или..

Надежда можно помочь новичку к лучшему пониманию :)

/Moberg

9
задан Moberg 22 April 2010 в 14:49
поделиться

1 ответ

(1) - это не уродливый хакер, но это не «лучший» способ создания потоков в наши дни. Пул потоков потоки через BeginInvoke / EndInvoke , BackgroundWorker и Task Parallel Library в .NET 4.0 - лучший вариант.

(2) - это хорошо, НО вам нужно где-то связать свой BeginInvoke с EndInvoke . Назначьте новое действие Action переменной, а затем вызовите для него x.EndInvoke () вручную в основном потоке или в методе завершения (второй параметр для BeginInvoke ). См. здесь как достойную ссылку.

Изменить: вот как (2) должен выглядеть примерно так, как (1):

    var thread2 = new Action<string>(this.work.DoStuff);
    var result = thread2.BeginInvoke(hello, null, null);
    thread2.EndInvoke(result);
9
ответ дан 4 December 2019 в 21:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: