首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QueueUserWorkItem的两种变体

如何使用QueueUserWorkItem的两种变体
EN

Stack Overflow用户
提问于 2015-10-29 23:11:01
回答 2查看 90关注 0票数 1

尝试理解ThreadPool方法QueueUserWorkItem的两种变体。

代码语言:javascript
复制
string bigS = "Big Stupid";
ThreadPool.QueueUserWorkItem( s =>
{
    Console.WriteLine("Working on a thread from threadpool B");
    Console.WriteLine("s = {0}", s.ToString());
}, bigS);

ThreadPool.QueueUserWorkItem(MethodA, bigS);

MethodA的定义如下所示。

代码语言:javascript
复制
private static void MethodA(object o)
{
    Console.WriteLine("o = {0}", o.ToString());
}

这两种方式都很好。但是还有另一种QueueUserWorkItem的变体,它接受方法的委托,接受单个参数并返回空。所以methodA应该没问题。但是下面的代码抛出异常,因为我没有在MethodA中传递对象o。我不想在MethodA中为o检查null。如何将第二个案例中的bigS传递给MethodA

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(MethodA);

另一种方法可能是这样的。但我想传递并访问o。我能做到这一点吗?

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem( o =>
{
Console.WriteLine("Working on a thread from threadpool");
});
EN

回答 2

Stack Overflow用户

发布于 2015-10-29 23:43:21

这在MSDN文档中不是很清楚,但是

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(callback);

等同于

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(callback, null);

如果在创建此API时存在可选参数,则很可能只有一种方法,如

代码语言:javascript
复制
public static bool QueueUserWorkItem(WaitCallback callBack, object state = null)

但是有一件事documentation (备注部分)是明确的-如果你想让你的回调接收一些东西,你需要传递它,也就是使用带有state参数的重载。

票数 1
EN

Stack Overflow用户

发布于 2015-10-29 23:44:49

中的o

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem( o =>
{
    Console.WriteLine("Working on a thread from threadpool");
});

将始终为空。它之所以出现在那里,是因为QueueUserWorkItem需要一个被定义为Action<object>WaitCallback。我认为微软开发人员只是不想定义第二个WaitCallback代表。在ActionFunc出现之前,ThreadPool就已经实现了。

你可以用你的lambda来捕获bigS

代码语言:javascript
复制
string bigS = "Big Stupid";
ThreadPool.QueueUserWorkItem( _ =>
{
    Console.WriteLine("Working on a thread from threadpool B");
    Console.WriteLine("s = {0}", bigS);
});

或者,如果必须使用MethodA,则如下所示

代码语言:javascript
复制
string bigS = "Big Stupid";
ThreadPool.QueueUserWorkItem( _ =>
{
    MethodA(bigS);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33417976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档