我想做的是在某个情况下,async
方法中我什么都不想要,而在await
方法中我不想执行public async Task<JObject> Process()
{
//if the _id is null I just do not want to do anything
//I do not want to throw an exception either as it's ok to not to do anything.
// I am not sure what is the recommended way to do this so I am just returning `new JObject()`
// so It compiles.
if(_id == null ) return new JObject();
return await DoTheWork();
}
代码。 (我也不想抛出异常,因为可以不做任何事情。)我应该怎么做?还是这样做更好?
所以我有以下代码:
select
department,
min_salary,
(select s1.last_name from staff s1 where s1.salary=s3.min_salary ) lastname
from
(select department, min (salary) min_salary from staff s2 group by s2.department) s3
我发现这个answer对我来说非常有用,我只是在此处发布以供参考。
答案 0 :(得分:1)
编辑:我的原始答案未解决帖子的真实问题。
与此相关的另一篇文章是关于返回null
和一个空对象:Should functions return null or an empty object?
如果您打算指出空值,通常最好返回null 没有可用数据。
一个空对象表示已返回数据,而返回null 清楚表明什么都没有退回。
此外,如果您返回null,则会导致null异常 尝试访问对象中的成员,这可能对 突出显示错误的代码-尝试不访问任何成员 没有意义。访问空对象的成员不会失败 意味着错误可能不会被发现。
但是,如果_id
永远不能成为null
,那么抛出异常可能是更好的解决方案,因为它可以帮助您优雅地处理逻辑中的错误,并允许您添加日志记录。
Microsoft通常还提供一些有关异步编程的出色文档。我会在这里看一下这篇文章:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model,尤其是这一部分:
如果使用async修饰符指定方法为异步方法,则启用以下两项功能。
- 标记的异步方法可以使用await来指定挂起点。等待操作符告诉编译器,直到等待的异步过程完成,异步方法才能继续到该点为止。同时,控制权返回给异步方法的调用者。 在await表达式中暂停异步方法并不构成对该方法的退出,并且最终块也不会运行。
- 标记的异步方法本身可以由调用它的方法来等待。
一个异步方法通常包含一个或多个出现的await运算符,但是缺少await表达式不会导致编译器错误。如果异步方法未使用await运算符标记暂停点,则尽管使用了async修饰符,该方法仍将与同步方法一样执行。编译器会针对此类方法发出警告。