异步操作时需要注意的要点
1.使用异步方法返回值应当避免使用void
在使用异步方法中最好不要使用void当做返回值,无返回值也应使用Task作为返回值,因为使用void作为返回值具有以下缺点
无法得知异步函数的状态机在什么时候执行完毕...,导致进程使命没有意义时,称之为饿死
死锁(deadlock):指两个或两个以上的线程相互争夺资源,导致进程永久堵塞,
使用Task.Result和Task.Wait()会在winform和ASP.NET...中会死锁,因为它们SynchronizationContext具有对象,两个线程在SynchronizationContext争夺导致死锁,而ASP.NET Core则不会产生死锁,因为ASP.NET...Core本质是一个控制台应用程序,并没有上下文
下面的例子,虽然都不会产生死锁,但是依然具有很多问题
async Task RunAsync()
{
// 此线程ID输出与UI...,并在定时器回调函数中丢弃该任务,并且如果此方法抛出异常,则也不会关闭进程,而是会触发TaskScheduler.UnobservedTaskException事件
public class Pinger