首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确配置System.Threading.Channels

如何正确配置System.Threading.Channels
EN

Stack Overflow用户
提问于 2022-03-25 04:34:25
回答 1查看 470关注 0票数 4

这件事说明了一切。具体来说,假设我以这种方式创建了Channels

代码语言:javascript
复制
Channel<byte[]> Stream { get; set; }

void Create() 
{
  Stream = System.Threading.Channels.Channel.CreateUnbounded<byte[]>();
}

问题

可以按以下顺序处理吗?

代码语言:javascript
复制
public virtual void Dispose()
{
  if (Stream.Writer.TryComplete()) // Dispose writer
  {
    Stream.Reader.Completion.ContinueWith(o => // Dispose reader
    {
      // Dispose the rest, e.g. some streaming server 

    }).Unwrap();
  }
}

一般来说,它可以工作,但是我想确保如果这段代码被多次执行,它不会导致内存泄漏或意外的运行时异常。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 14:41:03

我认为您的dispose方法是正确的,因为TryComplete只返回true一次,而且它是线程安全的。

但是有一个问题,您向订阅者公开频道,因此他们能够显式调用TryComplete/Complete来完成编写器。最好把它隐藏起来,只公开一个写方法。

代码语言:javascript
复制
public class StreamServer : IDisposable
{
    protected virtual Channel<byte[]> Stream { get; set; }
    public ValueTask WriteAsync(byte[] item) => Stream.Writer.WriteAsync(item);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71612218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档