【发布时间】:2018-01-10 16:01:33
【问题描述】:
所以我有这个函数,它接受一个没有参数的函数:
public static bool RetryUntilSuccessOrTimeout(Func<bool> task, TimeSpan timeSpan)
{
bool success = false;
int elapsed = 0;
while ((!success) && (elapsed < timeSpan.TotalMilliseconds))
{
Thread.Sleep(1000);
elapsed += 1000;
success = task();
}
return success;
}
然后我有一堆函数,比如:
private static bool OnDeleted(object source, FileSystemEventArgs e){...}
private static bool OnChanged(object source, FileSystemEventArgs e){...}
private static bool OnCreated(object source, FileSystemEventArgs e){...}
我有一个函数采用与这三个相同的参数。所以我提供了这些信息。有没有办法将这些函数作为不带任何参数的函数传递(因为我提供了它们)所以我可以将它传递给 RetryUntilSuccessOrTimeout() 的“任务”?
问题的封装图:
【问题讨论】:
-
当我看到任何这样调用的函数时,我内心都在畏缩。在您的情况下,它可以,当 func 为 null 时,您可能想要引发异常。我习惯性地用
task?.Invoke() ?? true来称呼这些,当一个合理的默认值在手时。否则在原地/上游处理 null ref。
标签: c# events lambda casting delegates