当前位置:  开发笔记 > 编程语言 > 正文

如果我正在返回任务而不等待任何事情,我应该使用async吗?

如何解决《如果我正在返回任务而不等待任何事情,我应该使用async吗?》经验,为你挑选了2个好方法。

在异步方法中,代码没有await任何东西,是否有人将其标记为异步,等待任务,然后返回?

除了潜在的不必要之外,这样做的负面影响是什么?

对于此示例,请假设QueryAsync返回Task.

private static async Task InsertRecord_AsyncKeyword(SqlConnection openConnection)
{
    int autoIncrementedReferralId =
        await openConnection.QueryAsync(@"
            INSERT INTO...
            SELECT CAST(SCOPE_IDENTITY() AS int)"
    );

    return autoIncrementedReferralId;
}

private static Task InsertRecord_NoAsyncKeyword(SqlConnection openConnection)
{
    Task task =
        openConnection.QueryAsync(@"
            INSERT INTO...
            SELECT CAST(SCOPE_IDENTITY() AS int)"
    );

    return task;
}

// Top level method
using (SqlConnection connection = await DbConnectionFactory.GetOpenConsumerAppSqlConnectionAsync())
{
    int result1 = await InsertRecord_NoAsyncKeyword(connection);
    int result2 = await InsertRecord_AsyncKeyword(connection);
}

Paulo Morgad.. 7

阅读Stephen Cleary撰写的这篇博客文章:

等待异步和等待



1> Paulo Morgad..:

阅读Stephen Cleary撰写的这篇博客文章:

等待异步和等待



2> Alexei Leven..:

不,您不应该不添加async方法await-甚至会有编译器警告。

您也不应该不必要地await在这种方法中添加内容,因为它将使编译器为该方法生成明显更复杂的代码,并带来一些相关的性能影响。

从时序的角度来看,两种模式之间没有可观察到的差异-任务仍将异步运行,并且您仍然能够立即或在调用方的稍后时间等待。

我可以想到一个区别-如果您直接返回任务,则调用方可能会使用ConfigureAwait(false)它,并且它将在其他线程上完成。当您await在内部的任务中使用该方法时,该方法将控制await执行代码的位置。

请注意,await最后使用单个方法的成本并不比不使用单个方法的成本显着差-因此,如果您希望async在所有异步方法上使用一致的编码风格用法,则除了时间紧迫的部分以外,它可能还不错。

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有