Task.Factory.StartNew方法中有一个TaskCreationOptions参数重载,如果设置为LongRunning,则会创建一个新线程执行
// 此方法会创建一个新线程进行执行...CancellationToken,所以如果想取消所有调用的异步函数,那么应该将CancllationToken传递给此调用链中的所有函数
❌下面例子在调用ReadAsync时并没有传递CancellationToken...使用定时器回调函数
❌下面例子使用一个返回值为void的异步,将其传递给Timer进行,因此,如果其中任务抛出异常,则整个进程将退出
public class Pinger
{
private...void FireAndForget(Func action) { }
}
3.使用ConcurrentDictionary.GetOrAdd注意场景
缓存异步结果是一种很常见的做法,ConcurrentDictionary...是一个很好的集合,而GetOrAdd也是一个很方便的方法,它用于尝试获取已经存在的项,如果没有则添加项.因为回调是同步的,所以很容易编写Task.Result的代码,从而生成异步的结果值,但是这样很容易导致线程池饥饿