等待和使用丢弃之间的区别



下面两行有什么区别。

await SkillReporterDatabase.Database.SaveAsync(someObject);
_ = SkillReporterDatabase.Database.SaveAsync(someObject);

哪一个是首选?有时,当我在等待中遇到一些问题时,我会使用_=,它可以解决问题。我在网上看不到任何解释这两者区别的资源。

的区别是丢弃(_(不关心一旦SaveAsync变为异步时会发生什么,这可能是所做的;这有两个重要的副作用:

  1. 您将不知道保存是否失败
  2. 如果您通过Database执行任何其他操作,则可能将在单个上下文/连接上运行重叠操作,这通常不受支持

因此,在这种情况下,await可能是首选。有时可以放弃任务,但这通常意味着当您在后台启动与当前流没有进一步交互的东西时。

如果没有等待,以后的操作将不会被SaveAsync调用阻止,因此将并发运行。丢弃只是保存任务(从概念上讲,任务有点像进度条(,而不是等待调用时保存任务的结果

所以CCD_ 6返回一个CCD_。在该Task上调用await将阻塞,直到任务完成并返回结果。不调用wait,而只是扔掉Task,就像在C++中扔掉一个指针一样——你的程序会启动任务,然后忘记它——它可能仍然完成,但这个方法中的代码永远不会发现它是否完成。

最新更新