C# 函数调用时强制等待
如果函数旁边没有wait关键字,是否可以创建一个抛出错误的函数?C# 函数调用时强制等待,c#,asynchronous,async-await,C#,Asynchronous,Async Await,如果函数旁边没有wait关键字,是否可以创建一个抛出错误的函数? 我没有用它做任何事情,我只是好奇,我想我可以看到,如果处理的数据对程序的运行有很大影响,它可能会有用处。不一定有好的方法可以做到这一点。将警告代码提升为错误是一种选择。但是,如果您只关心返回结果的异步函数,即任务,那么就有可能进行编译时检查 例如: public class ForceAwait { public Task<int> MethodAsync() => Task.FromResult(1);
我没有用它做任何事情,我只是好奇,我想我可以看到,如果处理的数据对程序的运行有很大影响,它可能会有用处。不一定有好的方法可以做到这一点。将警告代码提升为错误是一种选择。但是,如果您只关心返回结果的异步函数,即任务,那么就有可能进行编译时检查 例如:
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添加到“将警告视为项目属性中的错误”列表中。如果您的调用者希望这样做,该怎么办?这是一个非常糟糕的主意,不要对你的来电者做出假设。也许你应该写一些代码吗?-。-您是否至少尝试过一次,还是在等待现成的解决方案?从我在网上找到的最接近的东西是检测任务是否已被等待。显然,如果您检测到它,您可以创建并抛出自己的异常,但问题是,您只能在它完成异步操作后检测到它。我想知道您是否可以使用编译器错误阻止调用或提前抛出异常。