强制等待函数调用

时间:2018-07-06 10:07:20

标签: c# asynchronous async-await

是否可以创建一个函数,如果该函数旁边没有await关键字,则会引发错误? 我什么都没用,我很好奇,我想我可以看到,如果处理的数据极大地影响程序的运行,它可能会有用。

2 个答案:

答案 0 :(得分:0)

不一定有个好方法。将警告代码提升为错误是一种选择。但是,如果您只关心返回结果的async函数,即Task<T>,则可以进行编译时检查。

例如:

public class ForceAwait
{
    public Task<int> MethodAsync() => Task.FromResult(1);

    public Task Caller_Does_Not_Compile()
    {
        int result = MethodAsync();
        return Task.CompletedTask;
    }

    public async Task Caller_Compiles()
    {
        int result = await MethodAsync();
    }
}

通过将结果显式键入T而不是使用var,如果您尝试将Task<T>分配给类型T的变量,则编译器可能会提供错误信息。当然,这只是技巧/黑客,不适用于返回Task的方法。

答案 1 :(得分:0)

与DavidG达成协议。尝试将编译器警告级别设置为4,并为项目启用“将警告作为错误处理”。进行调试,发布和所有配置。