ThreadPool.QueueUserWorkItem 函数 argument/parameter
ThreadPool.QueueUserWorkItem with function argument/parameter
我有以下方法,我想 运行 使用 WaitCallBack 委托(C# 线程池)技术:
public void ExportData(string data){
//Codes goes in here
}
如何使用ThreadPool.QueueUserWorkItem(new WaitCallback(ExportData),object}
为了调用这个方法??
此函数期望的 WaitCallback 带有一个对象状态参数。所以你可以这样做:
string data = "some data";
ThreadPool.QueueUserWorkItem(state => ExportData((string)state), data);
或更新方法的签名:
public void ExportData(object state)
{
string data = (string)state;
//Codes goes in here
}
然后:
string data = "some data";
ThreadPool.QueueUserWorkItem(ExportData, data);
部分选项:
- 声明类型为
string
并转换为 的方法
改用 lambda 表达式,例如
ThreadPool.QueueUserWorkItem(ignored => ExportData(value))
我假设 value
是当时范围内的字符串变量。这将在您每次执行此代码时创建一个新的委托实例,以捕获 value
.
以上的组合:
ThreadPool.QueueUserWorkItem(x => ExportData((string) x), value)
这将(可能)在每次调用时重用相同的委托实例,因为值是通过正常 WaitCallback
传递的,而不是被委托捕获的。
此外,您可能需要考虑使用更现代的 Task
API,除非您的目标是旧版本的 .NET。这是一种通常更愉快的安排和管理任务的方式。
我有以下方法,我想 运行 使用 WaitCallBack 委托(C# 线程池)技术:
public void ExportData(string data){
//Codes goes in here
}
如何使用ThreadPool.QueueUserWorkItem(new WaitCallback(ExportData),object}
为了调用这个方法??
此函数期望的 WaitCallback 带有一个对象状态参数。所以你可以这样做:
string data = "some data";
ThreadPool.QueueUserWorkItem(state => ExportData((string)state), data);
或更新方法的签名:
public void ExportData(object state)
{
string data = (string)state;
//Codes goes in here
}
然后:
string data = "some data";
ThreadPool.QueueUserWorkItem(ExportData, data);
部分选项:
- 声明类型为
string
并转换为 的方法
改用 lambda 表达式,例如
ThreadPool.QueueUserWorkItem(ignored => ExportData(value))
我假设
value
是当时范围内的字符串变量。这将在您每次执行此代码时创建一个新的委托实例,以捕获value
.以上的组合:
ThreadPool.QueueUserWorkItem(x => ExportData((string) x), value)
这将(可能)在每次调用时重用相同的委托实例,因为值是通过正常
WaitCallback
传递的,而不是被委托捕获的。
此外,您可能需要考虑使用更现代的 Task
API,除非您的目标是旧版本的 .NET。这是一种通常更愉快的安排和管理任务的方式。