0

这是在同步方法中调用异步方法的更好方法吗?

public bool Sync() 
{ 
  return Task.Run(() => MyClass.IsSyncDone()).Result; 
}

会导致死锁吗?我真的需要知道一个更好的方法。因为我不想对系统调用进行异步,即应用程序启动、注册方法等。任何人都可以帮忙。

4

1 回答 1

2

如果您不需要响应,那么您可以轻松地执行以下操作:

public bool Sync() 
{ 
    Task.Run(async () => await MyClass.DoSync());
}

您需要响应将意味着更复杂的代码。如果没有看到完整的代码,很难提供具体的示例,但通常最好不要将如此长时间运行的复杂异步操作与同步操作联系起来。
将延续传递给异步方法以通过任务创建,或者让异步方法在完成时更新视图模型的绑定属性或触发自定义事件。

重要的是不要在应用程序生命周期事件处理程序中执行任何可能长时间运行的异步操作,因为这些操作需要很长时间才能导致应用程序被强制终止或应用程序数据处于不一致状态。

于 2013-11-06T13:30:46.473 回答