gpt4 book ai didi

c# - 异步等待 Task.FromResult(0)

转载 作者:行者123 更新时间:2023-11-30 22:10:10 25 4
gpt4 key购买 nike

不确定我对异步等待工作原理的理解是否搞砸了,但这就是我遇到的问题。考虑一个人为的例子

  1. 此代码块 UI

    public async void LoginButtonClicked()
    {
    //create a continuation point so every following statement will get executed as ContinueWith
    await Task.FromResult(0);
    //this call takes time to execute
    Remote.Login("user","password");
    }
  2. 但这并没有(显然)

     public void LoginButtonClicked()
    {
    Task.Run(()=>{ Remote.Login("user","password");});
    }

我喜欢使用方法 1,因为我不想使用 Task.Run 来完成长时间的工作,而我更喜欢框架处理这种形式。但问题是对方法 1 的调用似乎阻塞了。

最佳答案

如果您调用的所有长时间运行的操作都是异步的,则使用 await/async 只会阻止您阻塞 UI。在您的示例中,您的 Remote.Login 是一个同步调用,因此无论前面的 await 行做什么,这都会阻止您的 UI。

您需要获得实际长时间运行的操作的异步版本(例如返回 Task 的东西),或者如果这不可能,那么您可以求助于 Task.Run 以便将此工作移至 ThreadPool

如果可能,你想要什么:

public async void LoginButtonClicked()
{
await Remote.LoginAsync("user","password");
// do anything else required
}

关于c# - 异步等待 Task.FromResult(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com