我正在从事一个多任务网络项目,我是Threading.Tasks的新手。我实现了一个简单的Task.Factory.StartNew(),我想知道如何使用Task.Run()实现它
以下是基本代码:
Task.Factory.StartNew(new Action<object>(
(x) =>
{
// Do something with 'x'
}), rawData);我在对象浏览器中查看了System.Threading.Tasks.Task,找不到类似于Action<T>的参数。只有Action接受void参数,没有类型。
只有两种类似的东西:static Task Run(Action action)和static Task Run(Func<Task> function),但两者都不能发布参数。
是的,我知道我可以为它创建一个简单的扩展方法,但是我的主要问题是我们能用Task.Run()在单行上编写它吗?
发布于 2019-03-09 17:15:48
还不清楚最初的问题是否与我的问题相同:希望在循环中计算时最大限度地使用CPU线程,同时保留迭代器的值,并保持内联,以避免将大量变量传递给工作者函数。
for (int i = 0; i < 300; i++)
{
Task.Run(() => {
var x = ComputeStuff(datavector, i); // value of i was incorrect
var y = ComputeMoreStuff(x);
// ...
});
}我通过改变外部迭代器并用一个门来定位它的值来实现这一点。
for (int ii = 0; ii < 300; ii++)
{
System.Threading.CountdownEvent handoff = new System.Threading.CountdownEvent(1);
Task.Run(() => {
int i = ii;
handoff.Signal();
var x = ComputeStuff(datavector, i);
var y = ComputeMoreStuff(x);
// ...
});
handoff.Wait();
}https://stackoverflow.com/questions/30225476
复制相似问题