我曾经在构造函数中调用异步方法(触发并忘记了?)
Task.Run(async () => await CallAsync());
我听说最好使用ICommand
来执行它。
ICommand MyCmd => new Command(async () => await CallAsync());
public MyClass()
{
MyCmd.Execute(null);
}
这两种方法有什么区别?
答案 0 :(得分:2)
您的帖子没有多大意义。
如果您要触发并忘记一个异步方法,那么直接调用它就足够了。
public Task RunAsync() { }
public Constructor()
{
RunAsync(); // fire-and-forget by not awaiting and ignoring returned task
}
无需使用Task.Run
或Command
,从技术上讲,该方法在运行该方法之上没有任何作用。
但是这种一劳永逸的代码不受欢迎,因为它使对代码的测试变得困难。在构造函数中启动这样的代码会使对象创建产生意想不到的副作用,这些副作用不会立即显现出来。建议使用某种Initialize
方法可以调用。
另一个问题是,如果该方法导致异常,则必须注册一个特殊的处理程序,否则会使整个应用程序崩溃。