Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 函数调用时强制等待_C#_Asynchronous_Async Await - Fatal编程技术网

C# 函数调用时强制等待

C# 函数调用时强制等待,c#,asynchronous,async-await,C#,Asynchronous,Async Await,如果函数旁边没有wait关键字,是否可以创建一个抛出错误的函数? 我没有用它做任何事情,我只是好奇,我想我可以看到,如果处理的数据对程序的运行有很大影响,它可能会有用处。不一定有好的方法可以做到这一点。将警告代码提升为错误是一种选择。但是,如果您只关心返回结果的异步函数,即任务,那么就有可能进行编译时检查 例如: public class ForceAwait { public Task<int> MethodAsync() => Task.FromResult(1);

如果函数旁边没有wait关键字,是否可以创建一个抛出错误的函数?
我没有用它做任何事情,我只是好奇,我想我可以看到,如果处理的数据对程序的运行有很大影响,它可能会有用处。

不一定有好的方法可以做到这一点。将警告代码提升为错误是一种选择。但是,如果您只关心返回结果的异步函数,即任务,那么就有可能进行编译时检查

例如:

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,如果您试图将任务分配给T类型的变量,编译器可能会提供错误。当然,这只是一种技巧/技巧,不适用于返回任务的方法。

同意DavidG的观点。尝试将编译器警告级别设置为4,并为项目启用“将警告视为错误”。针对调试、发布和所有配置执行此操作。

不确定是否可以强制执行此操作,您可以将4014添加到“将警告视为项目属性中的错误”列表中。如果您的调用者希望这样做,该怎么办?这是一个非常糟糕的主意,不要对你的来电者做出假设。也许你应该写一些代码吗?-。-您是否至少尝试过一次,还是在等待现成的解决方案?从我在网上找到的最接近的东西是检测任务是否已被等待。显然,如果您检测到它,您可以创建并抛出自己的异常,但问题是,您只能在它完成异步操作后检测到它。我想知道您是否可以使用编译器错误阻止调用或提前抛出异常。