问题标签 [system.threading.channels]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-core-signalr - 如果连接断开,如何正确处理客户端流?
我正在使用 Microsoft.AspNetCore.SignalR 2.1 v1.0.4,并且使用 v1.0.4 的打字稿客户端正在使用 ChannelReader 流。
通道显示特定于单个实体的事件数据,因此当客户端的用户导航到该单个实体的页面呈现数据时,预计客户端将订阅通道。如果用户导航到相同的页面但针对不同的实体,则客户端将进行另一个订阅调用。
现在我的问题是关于如何最好地取消订阅流,一般来说,在集线器连接停止/启动场景下,流的生命周期对客户端来说是什么,以及服务器是否显式中止连接(由于 access_token 超时所以触发客户端刷新他们的连接)?
似乎没有从 api 显示一些连接状态,所以我目前使用 RxJs Subject 来显示我的 UI 组件/服务的一些连接状态,即当集线器连接的启动调用成功时,我显示“真”,当onclose 回调称为 I 表面“假”。这使我可以尝试在先前订阅的流上调用 dispose 以在连接断开/停止期间进行清理,然后在必要时在成功启动调用时再次调用订阅流。
我尝试在流上调用 dispose,如果集线器已连接,这很好,但如果连接处于断开状态,则会出错。我想知道这是否是一个错误。即使集线器断开连接,我也应该能够处理流吗?
可以只做一个delete streamsubscription
然后根据需要重新创建,还是会以任何方式泄漏?
c# - _ = WriteItems(channel.Writer, count, delay);中的下划线是什么意思
我正在阅读有关 SignalR 的信息,并且找到了代码:
下划线是什么意思?它是可变的吗?
asp.net-core-signalr - 如何扩展 SignalR ChannelReader?
我正在使用 SignalR 1.0.4 并有一个集线器,该集线器返回一个 ChannelReader 从一个可观察的由扩展创建的。
打字稿客户端(也是 1.0.4)被迫仅使用 websockets 连接,并从该通道流式传输数据。
现在我正在使用 2 个集线器实例进行横向扩展测试,它们都使用相同的 Redis 连接。我在两个实例上都从通道的 observable 发出值,但客户端似乎只从它所连接的实例接收数据。我的结论是频道阅读器数据不会通过 Redis 广播到其他频道。
我尝试使用SignalRSamples通过复制项目并为副本提供不同的主机 IP 来模拟 2 个负载平衡实例来复制它。我将相同的 Redis 连接添加到两个项目并启动它们。
通过 hubs.html 的常规 websocket 连接在跨实例广播数据时没有问题。streaming.html 不会为可观察或通道阅读器复制数据。
频道阅读器是否打算以这种方式使用,即它们可以横向扩展吗?
.net - 使用具有不同 TRead/TWrite 的 System.Threading.Channels
通道使用静态方法CreateUnbounded<TType>
或CreateBounded<TType>
. 创建的通道将接受写入并发出读取TType
.
在我的用例中,我想要一个写入TType
但发出的通道objects
。看起来这是可能的,因为有一种类型Channel<TWrite, TRead>
,所以基本上我想要一个Channel<TWrite, object>
. 有没有办法让我创建这个实例?请看下面的截图
c# - ChannelReader.WaitToReadAsync时如何避免抛出InvalidOperationException?
我使用 System.Threading.Channels 编写了异步队列。但是当我运行程序进行测试时,随机抛出以下异常并停止工作线程。
如果异常被捕获并忽略,则代码正在运行。但是我想摆脱原因不清楚的错误。
这是我的环境和最少的代码。
- TargetFramework = netcoreapp2.1
- System.Threading.Channels 版本 = 4.5.0
c# - 如何将事件处理程序合并到带有信号器的流式应用程序中?
我知道 c# 和 asp.net 核心的基础知识,但是我需要一些有关事件处理程序的帮助。我正在尝试构建一个将推文流式传输到前端的 asp.net 核心应用程序。我使用 tweetinvi 库来获取推文和信号器来进行流式传输。
我在控制台应用程序中测试了 tweetinvi 并且它有效。我使用事件处理程序并在控制台上显示了推文流。同样的方法不适用于 asp.net 核心应用程序。但是,我设法将随机生成的数字流式传输到前端。所以我在前端的 js 代码和后端的流媒体集线器设置工作正常。
获取推文需要事件处理程序实现,以便在收到每条推文后对其进行流式传输。在调试器中,我看到了推文及其内容。但是行:await channelWriter.WriteAsync(tweet,cancellationToken); 不向前端发送字符串。前端后端没有错误。
我将流作为一个类变量并检查了哈希码,它具有相同的值。所以看起来流没有被丢弃和关闭。
在调试模式下,TweetReceived 操作被无限调用并生成新的推文,但 WriteAsync 方法什么也不做。
后来,在开始时,当创建频道时,我添加了
只是发送“ok”字符串。然而这个方法没有被执行,当
稍后调用。我觉得很奇怪为什么稍后调用 StartStream 时 WriteAsync 不起作用。删除 StartStream 使 WriteSync 工作得很好。
asp.net - 无法在 asp .net core signalR 中播放示例客户端到服务器流式传输示例
我正在研究 .NET 框架 4.6.1。我想将数据从打字稿客户端流式传输到我的服务。我从 这里获取了代码。这是服务端代码:
客户端:
我正在使用 ASP .NET 核心 signalR 库。这些是安装在服务器端的包:Microsoft.AspNetCore 1.1.0、Microsoft.AspNetCore.SignalR.Common 1.1.0、Microsoft.AspNetCore.SignalR.Core 1.1.0、Microsoft.AspNetCore.SignalR.PROtocols.MessagePack 1.1。 0
在客户端,我有最新的预览版。“@aspnet/signalr”:“3.0.0-preview6.19307.2”,“@aspnet/signalr-protocol-msgpack”:“3.0.0-preview6.19307.2”,
我尝试寻找合适的包来安装 ASP .NET 框架,但没有找到任何东西。此功能是否可用于 .NET 框架 4.6.1。
当我从客户端调用 UploadaStream 函数时。我收到一个错误,指出无法调用“UploadStream”函数。请告诉我要安装的软件包的正确设置。
c# - 在使用 ChannelWriter 的 SignalR Core 中:如果出现异常,我是否需要调用 TryComplete 两次?
以下是 Microsoft在 ASP.NET Core SignalR中使用流式传输一文的摘录:
如果有异常,它会先调用 writer.TryComplete(ex),然后调用 writer.TryComplete()。换句话说,它两次调用 TryComplete(尽管重载不同)。
这是必要的吗?我应该在 writer.TryComplete(ex) 之后添加一个 return 语句以避免调用它两次吗?或者第二个 writer.TryComplete() 在调用前者之后是否有一些有意义的目的?