任务不包含Run方法的定义

时间:2018-01-20 20:32:26

标签: c# multithreading task

我第一次尝试在我的代码中实现多线程。当我试图使用

Task T = Task.Run(() => { });

Visual Studio仍然使用语句&#34强调Run();任务不包含定义'运行' "

我正在使用System.Threading.Tasks; 互联网对此问题一无所知

3 个答案:

答案 0 :(得分:16)

sbt run没有prod in Assets in stage := true方法。相反,您可以使用:

.NET 4.0

您可以了解有关here

的更多信息

答案 1 :(得分:5)

不幸的是,Task.RunTask.Factory.StartNew相同并不完全是correct

this回答中,它与4.0中的Task.Run最接近的是:

/// <summary>
/// Starts the new <see cref="Task"/> from <paramref name="function"/> on the Default(usually ThreadPool) task scheduler (not on the TaskScheduler.Current).
/// It is a 4.0 method nearly analogous to 4.5 Task.Run.
/// </summary>
/// <typeparam name="T">The type of the return value.</typeparam>
/// <param name="factory">The factory to start from.</param>
/// <param name="function">The function to execute.</param>
/// <returns>The task representing the execution of the <paramref name="function"/>.</returns>
public static Task<T> StartNewOnDefaultScheduler<T>(this TaskFactory factory, Func<T> function)
{
    Contract.Requires(factory != null);
    Contract.Requires(function != null);

    return factory
        .StartNew(
            function,
            cancellationToken: CancellationToken.None,
            creationOptions: TaskCreationOptions.None,
            scheduler: TaskScheduler.Default);
}

可以像:

一样使用
Task
    .Factory
    .StartNewOnDefaultScheduler(() => 
        result);

但是Task.RunTask.Factory.StartNew中引入的.NET 4.5的好包装。

但是根据您的情况,当您需要multithreading次操作时,只需使用它即可。

  

但别忘了。

如果您使用Task.Run代码,则应该Task.Factory.StartNew优先于async

在这个article中,Stephen Curry给出了StartNew方法危险的两个原因:

  • 不了解异步代理。
  • 混淆默认计划程序。

答案 2 :(得分:5)

Task.Run是在.NET 4.5中引入的,您使用的是.net 4.0。如果您无法升级项目,可以添加Microsoft.Bcl.Async NuGet包以引入TaskEx.Run(以将其添加到.net 4.0中。