如何在 .net 4 中异步执行操作

本文关键字:异步 执行 操作 net | 更新日期: 2023-09-27 18:36:22

我在WPF应用程序中得到了这段代码。

public void NotifyEntityUpdated(int userId, int entityId)
{
   Action currentAction = () =>
   {
      EntityUpdatedByUser(userId, entityId);
      SendEmail(userId, entityId);
   };
   this.Dispatcher.BeginInvoke(currentAction);
}

如何在 .net 4 中异步执行它?

如我所见,我不能像这样使用异步/等待...

public async Task<T> DoSomethingAsync<T>(Func<T, Task> resultBody) where T : Result, new()
{
    T result = new T();
    await resultBody(result);
    return result;
}

有什么线索吗?

如何在 .net 4 中异步执行操作

使用 .NET 任务,您可以执行类似操作。

1-首先解决并运行任务

private Task ExecuteTask(Result result)
{
  return Task.Run(() =>
  {
     this.resultBody(result)
  });
}

2-这样称呼它

await this.ExecuteTask(result);

我这里没有VS,但我希望它会起作用,祝你好运!

最后我找到了以下内容:

  1. 我得到的代码是正确的,并且可以 100% 异步工作。
  2. 我面临的问题发生是因为第二个方法SendEmail(userId,entityId);需要时间来执行,所以第一个方法的触发时间比应有的晚。

所以我找到了一个可行的解决方案。

public void NotifyEntityUpdated(int userId, int entityId)
{
   Action currentAction = () =>
   {
      EntityUpdatedByUser(userId, entityId);
   };
   this.Dispatcher.Invoke(currentAction,  DispatcherPriority.Send);
  Action currentAction2 = () =>
   {
      SendEmail(userId, entityId);
   };
   this.Dispatcher.BeginInvoke(currentAction2, DispatcherPriority.Loaded);
}