【问题标题】:How to run method with arguments in separate thread using Parallel Tasks如何使用并行任务在单独的线程中运行带有参数的方法
【发布时间】:2012-08-13 17:02:26
【问题描述】:

这里是代码示例

private void MethodStarter()
{
Task myFirstTask = Task.Factory.StartNew(Method1);
Task mySecondTask = Task.Factory.StartNew(Method1);
}

private void Method1()
{
 // your code
}

private void Method2()
{
 // your code
}

我正在寻找并行任务的代码 sn-p,通过它我可以执行回调并将参数也传递给函数。谁能帮忙。

【问题讨论】:

  • 您的代码实际上是并行运行的,所以您的问题是?
  • @CuongLe,看看我的回答。我想他想用参数调用函数。

标签: c# task-parallel-library


【解决方案1】:

如果我理解你的问题,这可能是答案:

private void MethodStarter()
{
    Task myFirstTask = Task.Factory.StartNew(() => Method1(5));
    Task mySecondTask = Task.Factory.StartNew(() => Method2("Hello"));
}

private void Method1(int someNumber)
{
     // your code
}

private void Method2(string someString)
{
     // your code
}

如果你想同时启动所有线程可以使用h1ghfive给出的例子。

更新: 一个应该可以工作但我还没有测试过的回调示例。

private void MethodStarter()
{
    Action<int> callback = (value) => Console.WriteLine(value);
    Task myFirstTask = Task.Factory.StartNew(() => Method1(5, callback));
    Task mySecondTask = Task.Factory.StartNew(() => Method2("Hello"));
}

private void Method1(int someNumber, Action<int> intCallback)
{
     // your code
     intCallback(100); // will call the call back function with the value of 100
}

private void Method2(string someString)
{
     // your code
}

如果您不想传入回调函数,也可以查看Continuation

【讨论】:

  • 我还需要回调机制,当 Method1() 完成时,另一个函数将改变我的状态。你能放点灯吗?
【解决方案2】:

你应该尝试这样的事情:

Parrallel.Invoke(
  () => Method1(yourString1),
  () => Method2(youString2));

【讨论】:

  • 传递的参数是在您方便的时候 :)
  • 如果您想在“同一”时间启动所有线程,这也是一个不错的解决方案。
  • 是的,感谢您指出这一点,我错过了在我的回答中指定它
  • 查看我更新的答案,您实际上不需要使用ContinueWith(但它是一种替代方法)。如果这是您想要的,我会改为使用显式回调,方法是将函数作为参数传递给方法。
  • @Thomas - “我还需要回调” - 那为什么这不是问题的一部分?
猜你喜欢
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 2023-01-31
相关资源
最近更新 更多