c# 异步的几个问题请教。
发布网友
发布时间:2022-05-08 11:37
我来回答
共1个回答
热心网友
时间:2024-02-15 05:43
1> 是
2> begininvoke是异步 事件是同步 没了..
其实我不太理解你问题的用意... 事件其实是委托的封装 而在执行事件委托的时候也可以异步执行... 可以说两个东西没有什么本质的关联..
非要说的话 事件可以用+=注册多个回调方法 ... 异步么... 对于一个IAsyncResult只有一个吧...
3> 啊 和死锁关系不大... 异步和多线程其实本质都是多线程 而异步用的是线程池 thread是自己创建的线程而已.... 自己创建大量线程调度起来当然没有线程池性能好... 但是优点就是可以自己调整线程的优先度 也可以随时挂起或终止线程... 所以和死锁没什么关系 你误解了-w-
4> 那么我想反问你... begin然后直接就endinvoke 这样写合理性何在...
EndInvoke是等待异步执行完成(若未完成)并返回结果的方法... 你直接endInvoke 那边可能线程池还没调度好呢... 这样就相当于执行一个同步方法了.... 当然 如果这是你期待的结果...
AsyncResult里面其实封装了一个线程锁.... 执行EndInvoke时如果这个锁是阻塞状态(也就是等待原方法返回的状态) 肯定就会阻塞当前线程了...
Thread Task BeginInvoke ThreadPool Parallel等等其实都是一种多线程的实现
只是看你如何用起来比较方便罢了-w-