【问题标题】:Background thread and event handler running in Blazor Component在 Blazor 组件中运行的后台线程和事件处理程序
【发布时间】:2020-04-22 02:43:53
【问题描述】:

我在让一个简单的 Blazor 组件正常工作时遇到问题。当按下表单中的按钮时,组件应该启动一个后台线程,将新元素添加到列表中(使用 SSE HTTP 调用)。在下面的代码中,问题是从未调用事件处理程序,并且没有呈现新消息。我认为问题是由于 StartAsync() 调用阻塞造成的,但我似乎无法让它在新线程上运行。

namespace BlazorTest
{
    public class DeepViewerComponent : ComponentBase
    {
        internal string SecretKey;
        internal string PublishableKey;
        private void OnNewMessage(string message)
        {
            this.Messages.Add(message);
            this.StateHasChanged();
        }

        private async Task ComponentMessageReceived()
        {
            this.Messages.Add("Component message from SSE");
            await this.InvokeAsync(StateHasChanged);
        }

        internal async Task Subscribe()
        {
            for (int i = 0; i < 3; i++)
            {
                await Task.Delay(500);
                this.OnNewMessage($"message {i}");
            }

            this.sandBoxClient = new IEXCloudClient(publishableToken: "a", secretToken: "b", signRequest: false, useSandBox: true);
            this.sseClient = sandBoxClient.SSE.SubscribeCryptoQuoteSSE(new List<string>() { "btcusdt" });

            sseClient.MessageReceived += async (s) => await ComponentMessageReceived();
            this.OnNewMessage("Starting");
            await sseClient.StartAsync();
            this.OnNewMessage("Started");

            this.OnNewMessage("Done");
        }
    }
}

输出是:

message 0
message 1
message 2
Starting

我希望输出是:

message 0
message 1
message 2
Starting
Component message from SSE
Component message from SSE
Component message from SSE
Component message from SSE
...

【问题讨论】:

  • 您能否将您的代码重写为Minimal, Reproducible Example 确保它可以帮助人们理解您的问题,快速回答并帮助其他用户解决类似问题。你可以。
  • 使用 this.OnNewMessage("来自 SSE 的组件消息");而不是 this.Messages.Add(

标签: c# .net blazor blazor-client-side


【解决方案1】:
  1. 它适用于服务器端
  2. 它挂在客户端

Blazor 客户端绝对是单线程的(JS / 浏览器限制),因此当 StartAsync() 需要一个线程(运行异步)时,它将在客户端中运行时阻塞。

结论:此 API 不适合在浏览器中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多