首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有参数的Task.Run?

具有参数的Task.Run?
EN

Stack Overflow用户
提问于 2015-05-13 21:27:34
回答 8查看 193.4K关注 0票数 109

我正在从事一个多任务网络项目,我是Threading.Tasks的新手。我实现了一个简单的Task.Factory.StartNew(),我想知道如何使用Task.Run()实现它

以下是基本代码:

代码语言:javascript
复制
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()在单行上编写它吗?

EN

Stack Overflow用户

发布于 2019-03-09 17:15:48

还不清楚最初的问题是否与我的问题相同:希望在循环中计算时最大限度地使用CPU线程,同时保留迭代器的值,并保持内联,以避免将大量变量传递给工作者函数。

代码语言:javascript
复制
for (int i = 0; i < 300; i++)
{
    Task.Run(() => {
        var x = ComputeStuff(datavector, i); // value of i was incorrect
        var y = ComputeMoreStuff(x);
        // ...
    });
}

我通过改变外部迭代器并用一个门来定位它的值来实现这一点。

代码语言:javascript
复制
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();
}
票数 2
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30225476

复制
相关文章

相似问题

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