我有案例:
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_result
、dialog2_result
上离开 awaits
吗?
GC会清理它吗? (假设 screen1
、dialog1-2
的实例是 GC-ed)
最佳答案
这在一般情况下很难回答,因为它归结为任务是否仍然可以从将要说“这是你的结果”的东西到达? - 我们可以不要回答那个。例如,dialog1
是否仍然存在?如果 dialog1
仍可访问且处于事件状态,并且任务仍未完成,则 dialog1_result
仍将可访问且处于事件状态 - 因为存在允许结果的引用链在将来的某个时间设置。然而,反之则不然。该任务不应使对话框保持事件状态(除非有人以某种不寻常的方式使用了异步状态)。
关于c# - 放弃等待的任务,它们是垃圾回收的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67105843/