golang支持'Defer Call'和c ++,我使用这个技巧(?).
struct DeferCall
{
DeferCall() {}
~DeferCall() { doSomeThing(); }
}
void SomeMethod()
{
DeferCall deferCall;
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在c#中做到这一点?
我需要像这个golang defer教程
sch*_*tbi 13
您可以使用System.Reactive.Disposables.Disposable来实现此目的
void Function()
{
string fileName = "InputFile.txt";
using var defer = Disposable.Create(() => { File.Delete(fileName); });
WriteFile(fileName);
ConvertFile(fileName, "OutputFile.txt");
}
Run Code Online (Sandbox Code Playgroud)
Den*_*nis 10
最接近的语言将是try-finally:
try
{
DoSomething();
}
finally
{
DoCleanup();
}
Run Code Online (Sandbox Code Playgroud)
最近的框架等价物将是IDisposable+ using:
using (var stream = File.OpenRead("foo.txt"))
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,defer术语让我感到困惑,因为这不是 "延期执行"(现在安排 - 稍后执行,可以通过任务实施),而是某种RAII实施.
PS假设你将继续学习golang:
Mri*_*boj -4
我从这里Defer Call获取GoLang了以下定义
defer 语句将函数调用推送到列表上。保存的调用列表在周围函数返回后执行。Defer 通常用于简化执行各种清理操作的函数。
C# 版本:
选项1:
TaskAPIDeferCall方法包装在TaskStart()方法,或者对于要继续的函数发布,将其包装在另一个任务对象中并使用ContinueWithAPI 执行,这将链接任务一个接一个地执行选项2:
Async-Await,其中所有 postawait关键字都在主调用完成时执行,这是标准的异步实现