Bit*_*lue 25 c# multithreading delegates threadpool
就在我现在使用以下代码添加排队的线程.我不喜欢它.而且我的同事也不会因为他们不太了解C#.我想要的只是将一个方法排队在一个新线程中执行.
private static void doStuff(string parameter)
{
// does stuff
}
// call (a)
ThreadPool.QueueUserWorkItem(a => doStuff("hello world"));
// call (b)
ThreadPool.QueueUserWorkItem(delegate { doStuff("hello world"); });
Run Code Online (Sandbox Code Playgroud)
那么还有其他用途ThreadPool.QueueUserWorkItem吗?
最好的是另一个1-Line-Call.如果可能,使用Func<>或Action<>.
ila*_*sch 17
您的问题的答案取决于您如何设计应用程序.你把它放在一个共同的项目中吗?你不想开销简单的操作.
但是,你可以为ThreadPool QueueUserItem创建一个接收params,1 param,2 param等的泛型调用.这很好,而不是发送一个简单的字符串并受到限制.
这是如何使用WaitCallback来创建参数QueueUserItem:
ThreadPool.QueueUserWorkItem(
new WaitCallback(delegate(object state)
{ YourMethod(Param1, Param2, Param3); }), null);
Run Code Online (Sandbox Code Playgroud)
使用ThreadPool从C#Execute方法(带参数)中获取
一些想法的链接:
http://msdn.microsoft.com/en-us/library/4yd16hza.aspx
.NET中的通用ThreadPool
委托.BeginInvoke与C#中的ThreadPool线程之间的区别
Mat*_*son 16
我不完全确定你正在寻找什么样的语法,但如果你不喜欢a你的例子中未使用的语法,为什么不使用Task呢?
Task.Run(() => doStuff("hello world"));
Run Code Online (Sandbox Code Playgroud)
它看起来并没有好多少,但至少它没有未使用的标识符.
注意:Task.Run()是.Net 4.5或更高版本.如果你正在使用.Net 4,你必须这样做:
Task.Factory.StartNew(() => doStuff("hello world"));
Run Code Online (Sandbox Code Playgroud)
这并不短.
以上两者都使用线程池.
如果你真的必须避免使用lambda,你可以使用匿名委托(@nowhewhomustnotbenamed已经提到过):
Task.Run(delegate { doStuff("Hello, World!"); });
Run Code Online (Sandbox Code Playgroud)
但那有什么意义呢?它的可读性低得多!
| 归档时间: |
|
| 查看次数: |
56811 次 |
| 最近记录: |