.net WebAssembly(Avalonia)Uncaught ManagedError:出现一个或多个错误,(无法在此运行时上等待监视器,)

oknwwptz  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(130)

我已经用AvaloniaUI创建了我的浏览器应用程序,它有下面的代码,来自App.axaml.cs:

using (var client = new HttpClient())
{
    var task = Task.Run(() => client.GetStringAsync(_apiBaseUrl));
    task.Wait();
    var content = task.Result;
    return Deserialize<TState?>(content) ?? new();
}

字符串
这段代码抛出PlatformNotSupportedException,当我运行浏览器版本的应用程序时:
Uncaught ManagedError:发生了一个或多个错误。(无法在此运行时上等待监视器。)
当我尝试使用.GetAwaiter().GetResult()而不是Task.Run()时,也会出现相同的错误
有人知道如何从浏览器应用程序发出http请求吗?
这将是很好的有能力重用相同的代码浏览器和桌面版本。

更新:

我尝试使用同步版本,因为方法public override void OnFrameworkInitializationCompleted()有void返回类型,异常处理将是一个麻烦,因为我知道。

mec1mxoz

mec1mxoz1#

浏览器上的.NET(通常大部分)不支持多线程。.NET 8只在最新的浏览器版本上提供了一些多线程支持,但它仍然是有限的。
你不能以任何方式阻塞主线程。“
有人知道如何从浏览器应用程序发出http请求吗?
使用异步方法而不阻塞。

using (var client = new HttpClient())
{
    var content = await client.GetStringAsync(_apiBaseUrl);
    return Deserialize<TState?>(content) ?? new();
}

字符串

相关问题