kif*_*ifu 11 c# multithreading task
我第一次尝试在我的代码中实现多线程.当我试图使用
Task T = Task.Run(() => { });
Run Code Online (Sandbox Code Playgroud)
Visual Studio仍然使用语句"任务不包含定义'运行'"强调Run()
我正在使用System.Threading.Tasks; 互联网对此问题一无所知
不幸的是,是不完全正确的那个Task.Run是一样的Task.Factory.StartNew.
在这个答案中,它给出了最接近Task.Run4.0的东西,如:
/// <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);
}
Run Code Online (Sandbox Code Playgroud)
可以像:
Task
.Factory
.StartNewOnDefaultScheduler(() =>
result);
Run Code Online (Sandbox Code Playgroud)
但是引入的Task.Run是一个很好的包装器.Task.Factory.StartNew.NET 4.5
但是对于您的情况,当您需要它进行multithreading操作时,只需使用它即可.
但别忘了.
你应该更喜欢Task.Run过Task.Factory.StartNew,如果你使用async的代码.
在本文中,Stephen Curry给出了StartNew方法危险的两个原因:
Task.Run是在.NET 4.5中引入的,您使用的是.net 4.0.如果无法升级项目,可以包含Microsoft.Bcl.Async NuGet包以引入将TaskEx.Run(其添加到.net 4.0中.