gpt4 book ai didi

c# - 这对 IDisposable 是否正确?

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:59 25 4
gpt4 key购买 nike

在 MSFT 的 Task-based Asynchronous Pattern whitepaper ,在第 11 页,Stephen Toub 有以下代码说明了 Task 围绕 Timer 回调的包装。

public static Task<DateTimeOffset> Delay(int millisecondsTimeout)
{
var tcs = new TaskCompletionSource<DateTimeOffset>();
new Timer(self =>
{
((IDisposable)self).Dispose(); //<--this is the line in question
tcs.TrySetResult(DateTimeOffset.UtcNow);
}).Change(millisecondsTimeout, -1);
return tcs.Task;
}

在第 6 行,他将 self 转换为 IDisposable。如果我正确地阅读了这个 lambda 表达式,self 将“转到”TimerCallback。 ,它没有实现 IDisposable。我读错了吗?

最佳答案

参数 self 是当您的委托(delegate) (lambda) 被 Timer 调用时传递的参数。根据 MSDN,此委托(delegate)的类型为 TimerCallback:

public delegate void TimerCallback(Object state)

当您不在 Timer 构造函数中提供状态时,它使用 Timer 实例本身作为状态:

Call this constructor when you want to use the Timer object itself as the state object.

所以 self 将是 Timer 的实例,可以安全地转换为 IDisposable。虽然参数的类型是 object 这意味着它必须是 object 的子类,它可以是 .NET 中的任何类型。

关于c# - 这对 IDisposable 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24393242/

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