【发布时间】:2010-04-22 14:49:07
【问题描述】:
考虑代码:
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) 是否也在做同样的事情?我想我要问的是是否启动了一个新线程,或者..
希望你能帮助初学者更好地理解:)
/莫伯格
【问题讨论】:
-
这里有一篇很棒的文章:ondotnet.com/pub/a/dotnet/2003/02/24/asyncdelegates.html,它解释了线程和异步委托之间的细微差别。
-
使用像线程一样昂贵的东西然后用 Thread.Join 浪费掉它是不可以接受的。有许多资源可以帮助您在线程和线程池线程之间进行选择。
标签: c# multithreading delegates begininvoke