C# 您可以使用Task.Run将CPU绑定的工作移动到后台线程

C# 您可以使用Task.Run将CPU绑定的工作移动到后台线程,c#,multithreading,asynchronous,async-await,C#,Multithreading,Asynchronous,Async Await,从 您可以使用Task.Run将CPU绑定的工作移动到后台线程 我的问题是,还有其他选择吗?如果我想使用wait关键字,我必须返回Task,因此我必须使用Task.Run public static Task<int> LongProcess() { return Task.Run<int>(() => { //Long running return 5; }); } public async static

您可以使用Task.Run将CPU绑定的工作移动到后台线程

我的问题是,还有其他选择吗?如果我想使用
wait
关键字,我必须返回Task,因此我必须使用
Task.Run

public static Task<int> LongProcess()
{
    return Task.Run<int>(() =>
    {
        //Long running 
        return 5;
    });
}

public async static void CallProcess()
{
    int a = await LongProcess();
}
公共静态任务LongProcess()
{
返回任务。运行(()=>
{
//长跑
返回5;
});
}
公共异步静态void CallProcess()
{
int a=等待长过程();
}

上面的代码不是使用wait的唯一选项吗?如果没有,请显示其他选项好吗?如果我不使用Task.Run,为什么我需要异步/等待?

这不仅仅是CPU密集型工作。通常情况下,您会使用async/await进行I/O工作,否则在等待文件系统、数据库或网络操作完成时会锁定线程。

您只能有效地等待需要以某种方式创建的任务。无论是Task.Run()还是Task.Factory.StartNew(),或者新任务()后跟Task.Start(),如果要等待它,您仍然需要一个任务。您可以对任何可等待的对象使用
wait
。例如,
任务
类有许多静态方法。请参见
TaskCompletionSource
class。在不同的类中有很多
*Async
方法。所有这些都可以与
wait
一起使用。