小豆子 有时候需要同时提供异步和同步两种方式,如果能拓展出一种异步转同步的方式会方便很多,也会降低学习成本,感觉从理论上来讲,这个操作应该是可行的…但是不知道实际上能不能实现,我认为理论上可行的一些原因如下:
在生成异步状态机后,执行异步任务,每一帧都把控制权交还回状态机,检查是否完成了这个任务,如果未完成则交还控制权给任务,这样循环交接控制权实现了阻塞,完成则退出任务,这时阻塞将结束。
但是实际上我认为比这复杂的多,但是也确实有一定的应用意义,如这样的应用场合
async ETTask LoadAsync();
void LoadSync();
就可以转换为 LoadAsync().WaitForCompletition();这时将阻塞主线程直到任务完成,从而实现在异步和同步之间建立一种连接和转换。
否则的话,如果需要在同步方法里调用异步的方法,则会产生这样的现象:
void SyncMethod()
{
DoSomethingAsync(callback);//我希望等待这个任务结束,但是我不希望让这里也传染了异步只能使用callback
}
而如果可以实现异步对同步的转换,则是这样
void SyncMethod()
{
DoSomethingAsync().WaitForCompletition();
}
以上仅仅是个人看法,不一定能真的实现,但是在Addreaable中确见过类似实现,还没来得及看AA的源码,不过不排除AA使用Task采用了多线程来进行阻塞和执行。