Blazor WebAssembly 监控线程异常

问题描述 投票:0回答:1

我目前正在开发 .NET Standard 2.1 Blazor WebAssembly 托管应用程序。

我的应用程序结构如下所示:

  • BlazorApp.Client(此处发生错误)
  • BlazorApp.服务器

我在 BlazorApp.Client 项目中将 Serilog 与 Elasticsearch 接收器结合使用。它工作正常,但是当我在 Serilog 上启用

Selflog
并调试时,我在浏览器控制台中收到以下错误:

SelfLog.Enable(msg => Debug.WriteLine(msg));

Elasticsearch.Net.UnexpectedElasticsearchClientException:无法在此运行时上等待监视器。 ---> System.Threading.SynchronizationLockException:无法在此运行时上等待监视器。

at(包装器托管到本机)System.Threading.Monitor.Monitor_wait(object,int)

at System.Threading.Monitor.ObjWait (System.Boolean exitContext, System.Int32 millisecondsTimeout, System.Object obj) <0x36c60c8 + 0x00046> in :0

在System.Threading.Monitor.Wait(System.Object obj,System.Int32毫秒Timeout,System.Boolean exitContext)<0x36c5de8 + 0x00022>中:0

这似乎是当前 Blazor WASm 版本中的一个问题:https://github.com/dotnet/aspnetcore/issues/22400

Cannot Wait on monitors
有谁知道如何消除 Blazor WebAssembly 客户端中的此错误?

c# multithreading blazor webassembly .net-standard-2.1
1个回答
5
投票

您无法在 Blazor WebAssembly 中“消除”该错误。 WebAssembly 代码(暂时)是单线程的,因此执行

System.Threading.Monitor.Wait(something);
肯定会死锁。

框架正确地向您发出信号,表明此代码不适合 WebAssembly。

您必须删除任何需要 Wait() 的代码(这通常意味着

lock(x) { ... }

© www.soinside.com 2019 - 2024. All rights reserved.