【问题】已知GetList是异步方法,为什么第二个报错第一个不会?
var a = (await _LogRepository.GetList()).FirstOrDefault();
var a2 = await _LogRepository.GetList().FirstOrDefault();
AI答:
因为第一个是等异步获取结束后再调用,第二个是在一个异步操作(await)上直接调用FirstOrDefault()这个同步方法。
不建议的操作(用Result关键字):
var result = _LogRepository.GetList().Result; // 同步等待异步任务完成
var a2 = result.FirstOrDefault(); // 在结果上调用 FirstOrDefault
AI答:
Task.Result 会同步阻塞当前线程,直到任务完成并返回结果,可能导致死锁问题。