我有一个叫做的函数:
Request(out response,string a)
返回一个布尔值
我想在多个线程中运行它,所以我写道:
ThreadPool.QueueUserWorkItem(new WaitCallback(Calss.Request), "");
(我不确定语法是否正确) 但是VS一直告诉我该函数必须有一个void作为返回
'expect a method with void request(object)' signature
我该怎么办?
答案 0 :(得分:4)
这是一个有助于查看文档的情况。 对于方法ThreadPool.QueueUserWorkItem,它需要委托WaitCallback。您需要传递一个运行方法,该方法需要一个对象,一个对象用作该方法的参数。
您的方法与回调的签名不同。该方法与Action<Object>
委托具有相同的签名。
您必须为要运行的具有所需签名的方法编写包装器方法:
void WrapperMethod(object state)
{
string a = state.ToString();
string response; // whatever this out parameter is...
Class.Request(out response,a);
}
然后设置你的主题:
ThreadPool.QueueUserWorkItem(WrapperMethod, "");
编译器实际上会为您设置委托。如果您运行的是.Net 4.5,则可以使用Task.Run
:
Task.Run(()=> Request(out response, a));
虽然不建议混合Task.Run和out参数。