异步操作时需要注意的要点
1.使用异步方法返回值应当避免使用void
在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点
无法得知异步函数的状态机在什么时候执行完毕...,可能就会导致死锁' 线程池饥饿 *数据结构损坏(如果代码异常运行)
所以在创建TaskCompletionSourece时,应该使用TaskCreationOption.RunContinuationAsyncchronously...代码更容易修改(例如:增加一个using)
异步的方法诊断起来更加容易(例如:调试,挂起)
抛出的异常将自动包装在返回的任务之中,而不是抛出实际异常
❌下面这个错误的例子是将Task直接返回给了调用者...使用定时器回调函数
❌下面例子使用一个返回值为void的异步,将其传递给Timer进行,因此,如果其中任务抛出异常,则整个进程将退出
public class Pinger
{
private...,从而生成异步的结果值,但是这样很容易导致线程池饥饿
❌下面这个例子就有可能导致线程池饥饿,因为当如果没有缓存人员数据时,将阻塞请求线程
public class PersonController :