c# - 放弃等待的任务,它们是垃圾回收的吗?

标签 c#

我有案例:
Screen1 打开 Dialog1,然后 Dialog1 打开 Dialog2,然后 Dialog2 返回结果到Dialog1关闭 Screen1

由于技术原因,我想像这里一样打开每个对话框(它是伪代码,展示想法):

// somewhere in screen1
var dialog1_result = await dialog1.ShowDialogAndAskUser();

// somewhere in dialog1
var dialog2_result = await dialog2.ShowDialogAndAskUser();

但有时 Dialog2 可以关闭整个 Screen1 并且不再需要上面的等待。

// somewhere in dialog2
screen1.CloseScreenAndAllDialogs();

我可以在 dialog1_resultdialog2_result 上离开 awaits 吗?
GC会清理它吗? (假设 screen1dialog1-2 的实例是 GC-ed)

最佳答案

这在一般情况下很难回答,因为它归结为任务是否仍然可以从将要说“这是你的结果”的东西到达? - 我们可以不要回答那个。例如,dialog1 是否仍然存在?如果 dialog1 仍可访问且处于事件状态,并且任务仍未完成,则 dialog1_result 仍将可访问且处于事件状态 - 因为存在允许结果的引用链在将来的某个时间设置。然而,反之则不然。该任务不应使对话框保持事件状态(除非有人以某种不寻常的方式使用了异步状态)。

关于c# - 放弃等待的任务,它们是垃圾回收的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67105843/

相关文章:

c# - 如何优雅地从 WebApi 消息处理程序返回异常

c# - 设置 Backgroundworker MVVM,更新 Progressbar

c# - 媒体播放器 c# 从网络播放

c# - 如何使用 C# 将不同的应用程序发送到托盘?

c# - 查找最接近今天的重复日期 - C#

c# - Windows 7 64 位和 Office 64 位上的 LinqToExcel

c# - 如何使用代码优先 Entity Framework 指定外键

c# - 在 VisualStudio 中创建 IronPython 项目时出错; "Exception has been thrown by the target of an invocation."

c# - 使用对象的对象属性列表的 LINQ 查询

c# - ISupportIncrementalLoading 集合 - 在 LoadingMoreItems 正在进行时通知 UI