gpt4 book ai didi

c# - C#中using语句的用法

转载 作者:太空狗 更新时间:2023-10-29 18:28:57 26 4
gpt4 key购买 nike

我对using语句有一些疑问:

我有一个类叫

MyJob 是一次性的。然后我在 MyJob JobResults 上也有一个属性,它也是一次性的。

我的代码:

using (MyJob job = new MyJob())
{
//do something.
FormatResults(job.JobResults)
}

public string FormatResuls(JobResuts results)
{
}

我的第一个问题是:在这种情况下,在 using block 之后是 MyJob 和 MyJob.Results 都被处理了,还是仅处理了 MyJob 而不是 MyJob.Results?

我还在 C# 中执行并行处理 w.r.t 任务:

Tasks allTasks = List<Tasks>

try
{
foreach(Task t in allTasks)
{
// Each tasks makes use of an IDisposable object.
t.Start();
}
Task.WaitAll(allTasks);
}
catch(AggregateExecption aex)
{
/// How do I ensure that all IDisposables are disposed properly if an exception happens in any of the tasks?
}

我的第二个问题,在上面的代码中,在处理任务中的异常时,确保正确处理对象的正确方法是什么?

如果我的问题太幼稚或令人困惑,我很抱歉,因为我仍在努力学习和理解 C#。谢谢大家!

最佳答案

are both MyJob and MyJob.Results disposed or only MyJob and NOT MyJob.Results?

这取决于您的 Dispose 方法的实现。由于我们在你的问题中没有看到它,我假设你目前没有在 MyJob.Dispose 中处理你的 Result 属性,因此它将是后者.

因为只有 MyJob 被包装在 using 语句中,并且再次假设它对您的 Result 属性没有任何作用,它将被处理为与 Results 相反,后者未包含在 using 语句中。

您可以决定 MyJob,因为它封装了您的 Result 属性,也负责释放它。如果您决定这样做,您可以在 MyJobs.Dispose 中处理 Results

what is the proper way to ensure to dispose off objects correctly when handling exceptions in tasks?

如果传递给 Task 的委托(delegate)被包裹在 using 语句中,你是安全的,因为 using 会转换你的代码对于 try-finally block ,如果在您的 using block 中发生异常,finally block 仍将运行 yourObject.Dispose.

关于c# - C#中using语句的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29864762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com