在构造函数中调用异步方法?

ca9*_*3d9 5 c# constructor asynchronous

我曾经在构造函数中调用异步方法(触发和忘记?)

 Task.Run(async () => await CallAsync());
Run Code Online (Sandbox Code Playgroud)

我听说最好使用ICommand它来执行它。

ICommand MyCmd => new Command(async () => await CallAsync());

public MyClass()
{
     MyCmd.Execute(null);
}
Run Code Online (Sandbox Code Playgroud)

这两种方法有什么区别?

Eup*_*ric 6

你的帖子没有多大意义。

如果你想触发并忘记一个异步方法,那么直接调用它就足够了。

public Task RunAsync() { }

public Constructor()
{
    RunAsync(); // fire-and-forget by not awaiting and ignoring returned task
}
Run Code Online (Sandbox Code Playgroud)

不需要使用Task.Runor Command,从技术上讲,它除了运行该方法之外什么都不做。

但是这种即发即弃的代码是不受欢迎的,因为它使代码测试变得困难。并且在构造函数中启动这样的代码会使对象创建产生意想不到的副作用,这些副作用不是立即明显的。建议有某种Initialize可以调用的方法。

另一个问题是,如果该方法导致异常,则必须注册一个特殊的处理程序,否则会使整个应用程序崩溃。