国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

System.Threading.Channels 高性能異步隊(duì)列

這篇具有很好參考價(jià)值的文章主要介紹了System.Threading.Channels 高性能異步隊(duì)列。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言

System.Threading.Channels 是.NET Core 3.0 后推出的新的集合類型, 具有異步API,高性能,線程安全等特點(diǎn),它提供一個(gè)異步數(shù)據(jù)集合,可用于生產(chǎn)者和消費(fèi)者之前的數(shù)據(jù)異步傳遞。

它提供如下方法:

BoundedChannelOptions

Provides options that control the behavior of bounded Channel<T> instances.

提供通道的行為控制 有限通道

Channel

Provides static methods for creating channels.

提供創(chuàng)建通道的靜態(tài)方法

Channel<T>

Provides a base class for channels that support reading and writing elements of type T.

泛型通道,寫入和讀取方類型都為 T

Channel<TWrite,TRead>

Provides a base class for channels that support reading elements of type TRead and writing elements of type TWrite.

泛型通道,分別指定寫入和讀取方的類型

ChannelClosedException

Exception thrown when a channel is used after it's been closed.

通道在關(guān)閉后被調(diào)用時(shí)會(huì)拋出此異常

ChannelOptions

Provides options that control the behavior of channel instances.

提供通道的行為控制

ChannelReader<T>

Provides a base class for reading from a channel.

通道讀取方的基類

ChannelWriter<T>

Provides a base class for writing to a channel.

通道寫入方的基類

UnboundedChannelOptions

Provides options that control the behavior of unbounded Channel

提供通道的行為控制 無(wú)限制通道

BoundedChannelFullMode

Specifies the behavior to use when writing to a bounded channel that is already full.

當(dāng)通道容量達(dá)到最大時(shí) 控制通道的寫入規(guī)則 有限通道

靜態(tài)類 Channel

通道的創(chuàng)建方法由靜態(tài)類Channel提供,只需要指定通道類型、控制條件和數(shù)據(jù)類型

CreateBounded<T>(BoundedChannelOptions)

Creates a channel with the specified maximum capacity.

創(chuàng)建具有指定配置的通道

CreateBounded<T>(BoundedChannelOptions, Action<T>)

Creates a channel subject to the provided options.

通道容量已滿,再寫入時(shí)會(huì)觸發(fā)Action<T>

CreateBounded<T>(Int32)

Creates a channel with the specified maximum capacity.

創(chuàng)建具有指定容量的通道

CreateUnbounded<T>()

Creates an unbounded channel usable by any number of readers and writers concurrently.

創(chuàng)建無(wú)限制通道,可供任意數(shù)量的讀取和寫入方同時(shí)操作

CreateUnbounded<T>(UnboundedChannelOptions)

Creates an unbounded channel subject to the provided options.

創(chuàng)建具有指定配置的無(wú)限制通道

BoundedChannelFullMode

DropNewest 1

刪除并忽略通道中的最新項(xiàng),以便為要寫入的項(xiàng)留出空間。

DropOldest 2

刪除并忽略通道中的最舊項(xiàng),以便為要寫入的項(xiàng)留出空間。

DropWrite 3

刪除要寫入的項(xiàng)。

Wait 0

等待空間可用以便完成寫入操作。

?ChannelOption

AllowSynchronousContinuations 如果通道上執(zhí)行的操作能以同步方式調(diào)用已訂閱掛起異步操作的通知的延續(xù),則為 true;如果應(yīng)以異步方式調(diào)用所有延續(xù),則為 false。
SingleReader

如果通道中的讀取器需要保證一次最多僅執(zhí)行一個(gè)讀取操作,則為 true;如果不需要此類約束,則為 false。

SingleWriter

如果寫入到通道的編寫器需要保證一次最多僅執(zhí)行一個(gè)寫入操作,則為 true;如果不需要此類約束,則為 false。

BoundedChannelOptions

BoundedChannelOptions(int Capcity)

初始化選項(xiàng)。

AllowSynchronousContinuations

如果通道上執(zhí)行的操作能以同步方式調(diào)用已訂閱掛起異步操作的通知的延續(xù),則為 true;如果應(yīng)以異步方式調(diào)用所有延續(xù),則為 false

(繼承自 ChannelOptions)
Capacity

獲取或設(shè)置有限通道可能會(huì)存儲(chǔ)的最大項(xiàng)數(shù)。

FullMode

獲取或設(shè)置通道已滿時(shí)由寫入操作引起的行為。BoundedChannelFullMode枚舉

SingleReader

如果通道中的讀取器需要保證一次最多僅執(zhí)行一個(gè)讀取操作,則為 true;如果不需要此類約束,則為 false。

(繼承自 ChannelOptions)
SingleWriter

如果寫入到通道的編寫器需要保證一次最多僅執(zhí)行一個(gè)寫入操作,則為 true;如果不需要此類約束,則為 false。

(繼承自 ChannelOptions)

?UnBoundedChannelOptions

AllowSynchronousContinuations 如果通道上執(zhí)行的操作能以同步方式調(diào)用已訂閱掛起異步操作的通知的延續(xù),則為 true;如果應(yīng)以異步方式調(diào)用所有延續(xù),則為 false。
SingleReader

如果通道中的讀取器需要保證一次最多僅執(zhí)行一個(gè)讀取操作,則為 true;如果不需要此類約束,則為 false

SingleWriter

如果寫入到通道的編寫器需要保證一次最多僅執(zhí)行一個(gè)寫入操作,則為 true;如果不需要此類約束,則為 false。

Writer

Complete(Exception)

Mark the channel as being complete, meaning no more items will be written to it.

標(biāo)記通道即將關(guān)閉,意味著沒(méi)有更多的數(shù)據(jù)需要寫入

TryComplete(Exception)

Attempts to mark the channel as being completed, meaning no more data will be written to it.

嘗試關(guān)閉通道,意味著沒(méi)有更多的數(shù)據(jù)需要寫入,成功返回 true,反之false

TryWrite(T)

Attempts to write the specified item to the channel.

嘗試寫入數(shù)據(jù),成功返回 true ,反之 false

WaitToWriteAsync(CancellationToken)

Returns a ValueTask<TResult> that will complete when space is available to write an item.

將等待有可用空間寫入項(xiàng)時(shí)完成寫入并返回 true, 或在通道關(guān)閉后返回 false

WriteAsync(T, CancellationToken)

Asynchronously writes an item to the channel.

Reader

ReadAllAsync(CancellationToken)

Creates an IAsyncEnumerable<T> that enables reading all of the data from the channel.創(chuàng)建的異步可枚舉項(xiàng)

ReadAsync(CancellationToken)

Asynchronously reads an item from the channel.

TryPeek(T)

Attempts to peek at an item from the channel.

TryRead(T) 如果項(xiàng)已讀取到,則為 true;否則為 false
WaitToReadAsync(CancellationToken)

它將在有數(shù)據(jù)可供讀取時(shí)完成,并返回 true 結(jié)果;或?qū)⒃谝蛲ǖ莱晒ν瓿啥辉儆袛?shù)據(jù)可供讀取時(shí)完成,并返回 false 結(jié)果

示例

// 創(chuàng)建有限容量的channel 
var channel1 = Channel.CreateBounded<string>(100);

var option = new BoundedChannelOptions(100) 
{ 
    FullMode = BoundedChannelFullMode.Wait//容量滿時(shí),等待空位再寫入 
};
// 創(chuàng)建指定配置的有限通道
var channel2 = Channel.CreateBounded<string>(option);

await channel.Writer.WriteAsync("hello");//寫入
string res = await channel.Reader.ReadAsync();//讀取

//自動(dòng)循環(huán)讀取,內(nèi)部阻塞,當(dāng)寫入方調(diào)用Complete時(shí),會(huì)自動(dòng)退出循環(huán)
await foreach(var item in channel.Reader.ReadAllAsync())
{
    Console.WriteLine(item); 
}

//捕獲到異常 退出
try
{
    while(!channel.Reader.Completion.IsCompleted)
    {
        var message = await channel.Reader.ReadAsync();
        Console.WriteLine(message);
    }
}
catch(ChannelClosedException)
{
    Console.WriteLine("channel closed");
}

有意思的是當(dāng)寫入方Writer調(diào)用Complete方法時(shí),Reader.Completion.Completed并不會(huì)立即被標(biāo)記,而是通道內(nèi)沒(méi)有數(shù)據(jù)時(shí)再被標(biāo)記。

此外,當(dāng)寫入方Writer調(diào)用Complete方法時(shí),await foreach會(huì)自動(dòng)退出循環(huán)。但上述第二種讀取方式會(huì)報(bào)錯(cuò)ChannelClosedException,需要Try Catch包起來(lái)。

.Net Framework 4.8 沒(méi)有ReadAllAsync方法,ReadAkkAsync的實(shí)現(xiàn)其實(shí)是:

while (await channel.Reader.WaitToReadAsync())
{
    while (channel.Reader.TryRead(out var item))
    {
        Console.WriteLine(item);
    }
}

可以用上述方式避免報(bào)錯(cuò)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-821717.html

到了這里,關(guān)于System.Threading.Channels 高性能異步隊(duì)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【消息隊(duì)列】Kafka如何實(shí)現(xiàn)高性能IO

    【消息隊(duì)列】Kafka如何實(shí)現(xiàn)高性能IO

    我們直到Kafka是一個(gè)自稱高性能的消息隊(duì)列引擎,一般來(lái)說(shuō)對(duì)于中間件的設(shè)計(jì)需要從計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)三方面進(jìn)行下手,而消息從產(chǎn)生到消費(fèi),也會(huì)經(jīng)歷多個(gè)流程,比如在生產(chǎn)者端采用異步同步方式發(fā)送,采用高效的壓縮算法,高效的序列化方式,以及網(wǎng)絡(luò)IO等。那么Kafka主要

    2023年04月13日
    瀏覽(27)
  • 深入詳解高性能消息隊(duì)列中間件 RabbitMQ

    深入詳解高性能消息隊(duì)列中間件 RabbitMQ

    ? 目錄 1、引言 2、什么是 RabbitMQ ? 3、RabbitMQ 優(yōu)勢(shì) 4、RabbitMQ 整體架構(gòu)剖析 4.1、發(fā)送消息流程 4.2、消費(fèi)消息流程 5、RabbitMQ 應(yīng)用 5.1、廣播 5.2、RPC VC++常用功能開發(fā)匯總(專欄文章列表,歡迎訂閱,持續(xù)更新...) https://blog.csdn.net/chenlycly/article/details/124272585 C++軟件異常排查從入

    2024年02月05日
    瀏覽(92)
  • 解析RocketMQ:高性能分布式消息隊(duì)列的原理與應(yīng)用

    什么是消息隊(duì)列 消息隊(duì)列是一種消息傳遞機(jī)制,用于在應(yīng)用程序和系統(tǒng)之間傳遞消息,實(shí)現(xiàn)解耦和異步通信。它通過(guò)將消息發(fā)送到一個(gè)中間代理(消息隊(duì)列),然后由消費(fèi)者從該隊(duì)列中獲取消息并處理。 RocketMQ簡(jiǎn)介 RocketMQ是阿里巴巴開源的一款高性能分布式消息隊(duì)列系統(tǒng)。它

    2024年02月14日
    瀏覽(26)
  • RocketMQ on openEuler 提供高性能消息隊(duì)列的穩(wěn)定性解決方案

    RocketMQ on openEuler 提供高性能消息隊(duì)列的穩(wěn)定性解決方案

    RocketMQ on openEuler,是一種將 RocketMQ 消息中間件通過(guò)容器化的方式部署在 openEuler 操作系統(tǒng)上運(yùn)行,借助 openEuler 系統(tǒng)對(duì)于 OS 緩存回收效率增強(qiáng)的內(nèi)核特性,提升消息中間件在面向超大規(guī)模高并發(fā)、高吞吐量、低延遲場(chǎng)景下穩(wěn)定性和可靠性的軟件解決方案。 移動(dòng)云 RocketMQ 消息

    2024年02月11日
    瀏覽(29)
  • Unity中的異步編程【5】——在Unity中使用 C#原生的異步(Task,await,async) - System.Threading.Tasks

    Unity中的異步編程【5】——在Unity中使用 C#原生的異步(Task,await,async) - System.Threading.Tasks

    1、System.Threading.Tasks中的Task是.Net原生的異步和多線程包。 2、UniTask(Cysharp.Threading.Tasks)是仿照.Net原生的Task,await,async開發(fā)的一個(gè)包,該包專門服務(wù)于Unity,所以取名UnityTask,簡(jiǎn)稱UniTask。 3、既然有Task了,為啥還要搞一個(gè)UniTask (1)Task可以用在PC和Android上,但是在WebGL上則會(huì)

    2023年04月17日
    瀏覽(25)
  • 《高性能MySQL》——?jiǎng)?chuàng)建高性能的索引(筆記)

    《高性能MySQL》——?jiǎng)?chuàng)建高性能的索引(筆記)

    索引(在MySQL中也叫做“鍵(key)”) 是存儲(chǔ)引擎用于快速找到記錄的一種數(shù)據(jù)結(jié)構(gòu)。 索引對(duì)于良好的性能非常關(guān)鍵。尤其是當(dāng)表中的數(shù)據(jù)量越來(lái)越大時(shí),索引對(duì)性能的影響愈發(fā)重要。 在數(shù)據(jù)量較小且負(fù)載較低時(shí),不恰當(dāng)?shù)乃饕龑?duì)性能的影響可能還不明顯,但當(dāng)數(shù)據(jù)量逐漸增大時(shí)

    2024年02月07日
    瀏覽(95)
  • 【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    【Linux高性能服務(wù)器編程】——高性能服務(wù)器框架

    ? hello !大家好呀! 歡迎大家來(lái)到我的Linux高性能服務(wù)器編程系列之高性能服務(wù)器框架介紹,在這篇文章中, 你將會(huì)學(xué)習(xí)到高效的創(chuàng)建自己的高性能服務(wù)器,并且我會(huì)給出源碼進(jìn)行剖析,以及手繪UML圖來(lái)幫助大家來(lái)理解,希望能讓大家更能了解網(wǎng)絡(luò)編程技術(shù)?。?! 希望這篇

    2024年04月25日
    瀏覽(97)
  • 讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    讀高性能MySQL(第4版)筆記09_創(chuàng)建高性能索引(下)

    1.4.4.1.?InnoDB的二級(jí)索引在葉子節(jié)點(diǎn)中保存了記錄的主鍵值,所以如果二級(jí)索引能夠覆蓋查詢,則可以避免對(duì)主鍵索引的二次查詢 7.1.5.1.?常見的類似錯(cuò)誤通常是由于嘗試使用rsync備份InnoDB導(dǎo)致的 7.3.3.1.?否則,對(duì)于范圍查詢、索引覆蓋掃描等操作來(lái)說(shuō),速度可能會(huì)降低很多 7

    2024年02月08日
    瀏覽(97)
  • 讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    讀高性能MySQL(第4版)筆記08_創(chuàng)建高性能索引(上)

    2.4.2.1.?按照索引列中的數(shù)據(jù)大小順序存儲(chǔ)的 2.4.3.1.?鍵前綴查找只適用于根據(jù)最左前綴的查找 2.4.4.1.?在查詢某些條件的數(shù)據(jù)時(shí),存儲(chǔ)引擎不再需要進(jìn)行全表掃描 2.4.4.2.?通過(guò)比較節(jié)點(diǎn)頁(yè)的值和要查找的值可以找到合適的指針進(jìn)入下層子節(jié)點(diǎn),這些指針實(shí)際上定義了子節(jié)點(diǎn)頁(yè)中

    2024年02月08日
    瀏覽(94)
  • 《高性能MYSQL》-- 查詢性能優(yōu)化

    《高性能MYSQL》-- 查詢性能優(yōu)化

    查詢性能優(yōu)化 深刻地理解MySQL如何真正地執(zhí)行查詢,并明白高效和低效的原因何在 查詢的生命周期(不完整):從客戶端到服務(wù)器,然后服務(wù)器上進(jìn)行語(yǔ)法解析,生成執(zhí)行計(jì)劃,執(zhí)行,并給客戶端返回結(jié)果。 一條查詢,如果查詢得很慢,原因大概率是訪問(wèn)的數(shù)據(jù)太多 對(duì)于低

    2024年03月11日
    瀏覽(97)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包