我第一次尝试在我的代码中实现多线程。当我试图使用
时Task T = Task.Run(() => { });
Visual Studio仍然使用语句&#34强调Run();任务不包含定义'运行' "
我正在使用System.Threading.Tasks; 互联网对此问题一无所知
答案 0 :(得分:16)
答案 1 :(得分:5)
不幸的是,Task.Run
与Task.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.Run
是Task.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中。