在.NET Web API中切换同步和异步行为

时间:2017-07-07 16:33:33

标签: c# multithreading asynchronous

我被要求实施这样的事情:

public async Task<IHttpActionResult> Get(bool sync)
{
    if(sync)
    {
        ...sync behavior
    } else
    {
        ...async behavior
    }
}

现在,我了解同步/异步行为和线程的基础知识,并且担心可能出错的事情(异步代码同步运行,线程阻塞,返回任意任务以匹配方法签名通常很邋等,等等...),但还不足以确定这段代码是个坏主意。所以,我的问题是:这总是不好的做法,还是有可能没事的情况?

1 个答案:

答案 0 :(得分:0)

异步方法将同步运行,直到它们到达await。如果await正在等待结果,则返回控件。

因此,只要异步路径使用等待,您的代码就没有问题。

但重要的是要注意,那就是异步方法不必等待任何长时间运行的操作,它将同步执行!因此,即使您使用等待,也无法保证控制权被回馈。