色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹一種基于任務(wù)的異步模式TAP

冬至配餃子 ? 來源:希夏普 ? 作者:吉旺 ? 2022-08-19 11:45 ? 次閱讀

TAP 是基于任務(wù)的異步模式,在 .NET Framework 4 中引入。TAP 是 APM 和 EAP,是推薦的模式模式。

異步/等待

async 和 是為異步編程的語法,方便我們在之前編寫異步代碼,有辦法會(huì)等待,但不會(huì)阻止。

public async Task DoSomethingAsync()
{
// For this example, we`re just going to (aynchronously) wait 100ms.
await Task.Delay(100);
}

對(duì)于調(diào)用的方法,等一個(gè)方法結(jié)束后會(huì)顯示,等今天今天繼續(xù)執(zhí)行顯示代碼。、

等待的

await 就像是一元操作符,接收一個(gè)參數(shù) - awaitable。Task 和 Task 都是這樣的類型。

public async Task NewStuffAsync()
{
// Use await and have fun with the new stuff.
await ...
}
public Task MyOldTaskParallelLibraryCode()
{
// Note that this is not an async method, so we can`t use await in here.
...
}
public async Task ComposeAsync()
{
// We can await Tasks, regardless of where they come from.
await NewStuffAsync();
await MyOldTaskParallelLibraryCode();
}
Task.Yield()
await Task.Yield() 異步強(qiáng)制完成方法,可以來讓我們的異步方法執(zhí)行。 Yield() ,讓其他調(diào)度需要的任務(wù),隨后完成該任務(wù)更替。

static async Task Process()
{
await Task.Yield();

var tcs = new TaskCompletionSource();

Task.Run(() =>
{
Thread.Sleep(1000);
tcs.SetResult(true);
});

tcs.Task.Wait();
}

我不著急,我到后面再去其他任務(wù)去,你先去處理吧。其實(shí)是利用等待線程的切換。

任務(wù).配置等待

在這種情況下,某種方法結(jié)束后可以繼續(xù)執(zhí)行當(dāng)前的回復(fù)任務(wù)。

await someTask.ConfigureAwait(continueOnCapturedContext:false);
CancellationTokenSource
從 .NET Framework 4 開始,TAP 方法支持取消操作。

var cts = new CancellationTokenSource();
string result = await DownloadStringTaskAsync(url, cts.Token);
… // at some point later, potentially on another thread
cts.Cancel();

// 取消多個(gè)異步調(diào)用
var cts = new CancellationTokenSource();
IList results = await Task.WhenAll(from url in urls select DownloadStringTaskAsync(url, cts.Token));
// at some point later, potentially on another thread

cts.Cancel();

進(jìn)步

通過進(jìn)度可以遠(yuǎn)程監(jiān)控方法的執(zhí)行。

private async void btnDownload_Click(object sender, RoutedEventArgs e)
{
btnDownload.IsEnabled = false;
try
{
txtResult.Text = await DownloadStringTaskAsync(txtUrl.Text,
new Progress(p => pbDownloadProgress.Value = p));
}
finally { btnDownload.IsEnabled = true; }
}

任務(wù)運(yùn)行

Task.Run() 可以很方便地執(zhí)行任務(wù)。

public async void button1_Click(object sender, EventArgs e)
{
// 默認(rèn)恢復(fù)上下文
textBox1.Text = await Task.Run(() =>
{
// … do compute-bound work here
return answer;
});
}

public async void button1_Click(object sender, EventArgs e)
{
// 內(nèi)部使用 await
pictureBox1.Image = await Task.Run(async() =>
{
using(Bitmap bmp1 = await DownloadFirstImageAsync())
using(Bitmap bmp2 = await DownloadSecondImageAsync())
return Mashup(bmp1, bmp2);
});
}
任務(wù).FromResult
Task.FromResult 使用創(chuàng)建一個(gè)帶返回值的,已完成的任務(wù)。

public Task GetValueAsync(string key)
{
int cachedValue;
return TryGetCachedValue(out cachedValue) ?
Task.FromResult(cachedValue) : // 如果本地有緩存,直接以同步的方式獲?。ǖ祷氐氖钱惒浇Y(jié)果)
GetValueAsyncInternal(); // 如果本地沒有key對(duì)應(yīng)的緩存,則異步從遠(yuǎn)端獲取
}
// 異步方法從遠(yuǎn)端獲取緩存
private async Task GetValueAsyncInternal(string key)
{

}

任務(wù).WhenAll

完成異步 異步操作的。

Task [] asyncOps = (from addr in addrs select SendMailAsync(addr)).ToArray();
try
{
await Task.WhenAll(asyncOps);
}
catch(Exception exc)
{
foreach(Task faulted in asyncOps.Where(t => t.IsFaulted))
{
… // work with faulted and faulted.Exception
}
}

Task.WhenAny

一次異步操作中,第一個(gè)異步操作完成時(shí)返回。

1. 可以同時(shí)進(jìn)行多個(gè)相同的異步操作,同時(shí)進(jìn)行選擇完成的那個(gè)

// 從多個(gè)行情源處獲取行情,使用最快的那個(gè)
var cts = new CancellationTokenSource();
var recommendations = new List>()
{
GetBuyRecommendation1Async(symbol, cts.Token),
GetBuyRecommendation2Async(symbol, cts.Token),
GetBuyRecommendation3Async(symbol, cts.Token)
};

Task recommendation = await Task.WhenAny(recommendations);
cts.Cancel(); // 取消剩余任務(wù)
if (await recommendation) BuyStock(symbol);
1.多個(gè)任務(wù)交叉進(jìn)行(每完成一個(gè)就處理一個(gè))

List> imageTasks =
(from imageUrl in urls select GetBitmapAsync(imageUrl)
.ContinueWith(t => ConvertImage(t.Result)).ToList();
while(imageTasks.Count > 0)
{
try
{
Task imageTask = await Task.WhenAny(imageTasks);
imageTasks.Remove(imageTask);

Bitmap image = await imageTask;
panel.AddImage(image);
}
catch{}
}

任務(wù)延遲

在任意方法中確定任務(wù)??梢院?Task.WhenAny ,Task.WhenAll 結(jié)合使用以暫態(tài)調(diào)用處理。

public async void btnDownload_Click(object sender, EventArgs e)
{
btnDownload.Enabled = false;
try
{
Task download = GetBitmapAsync(url);
if (download == await Task.WhenAny(download, Task.Delay(3000)))
{
Bitmap bmp = await download;
pictureBox.Image = bmp;
status.Text = "Downloaded";
}
else
{
pictureBox.Image = null;
status.Text = "Timed out";
var ignored = download.ContinueWith(
t => Trace("Task finally completed"));
}
}
finally { btnDownload.Enabled = true; }
}



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • .NET
    +關(guān)注

    關(guān)注

    0

    文章

    47

    瀏覽量

    24282
  • APM
    APM
    +關(guān)注

    關(guān)注

    1

    文章

    71

    瀏覽量

    13034
  • tap
    tap
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2667
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Spring Boot如何實(shí)現(xiàn)異步任務(wù)

    Spring Boot 提供了多種方式來實(shí)現(xiàn)異步任務(wù),這里介紹主要實(shí)現(xiàn)方式。 1、基于注解 @Async @Async 注解是 Spring 提供的
    的頭像 發(fā)表于 09-30 10:32 ?1460次閱讀

    在DSP平臺(tái)下對(duì)多路交流信號(hào)采樣時(shí)采用的一種異步采樣方法介紹

    本文介紹一種在DSP平臺(tái)下對(duì)多路交流信號(hào)采樣時(shí)采用的一種異步采樣方法。
    發(fā)表于 04-02 07:01

    請問怎樣去設(shè)計(jì)一種異步FIFO?

    為什么要設(shè)計(jì)一種異步FIFO?異步FIFO的設(shè)計(jì)原理是什么?怎樣去設(shè)計(jì)一種異步FIFO?
    發(fā)表于 06-18 09:20

    怎樣去設(shè)計(jì)一種基于Matlab的雙饋異步風(fēng)力發(fā)電機(jī)?

    雙饋異步風(fēng)力發(fā)電機(jī)是什么?怎樣去設(shè)計(jì)一種基于Matlab的雙饋異步風(fēng)力發(fā)電機(jī)? 如何對(duì)雙饋異步風(fēng)力發(fā)電機(jī)進(jìn)行仿真?
    發(fā)表于 07-06 06:49

    介紹一種基于matlab/simulink的異步電動(dòng)機(jī)仿真模型

    本文從異步電動(dòng)機(jī)的數(shù)學(xué)模型著手介紹一種基于matlab/simulink的異步電動(dòng)機(jī)仿真模型,使用時(shí)只需要輸入不同的電機(jī)參數(shù)即可。在此基礎(chǔ)上設(shè)計(jì)
    發(fā)表于 09-06 06:42

    異步的功能介紹

    promises-based flow-control abstraction utility. 這是個(gè)由多個(gè)部分組成的博客系列文章,重點(diǎn)介紹異步的功能, 異步
    發(fā)表于 09-06 09:23

    STM32的三boot模式介紹

    淺識(shí)STM32的三boot模式文章目錄淺識(shí)STM32的三boot模式任務(wù)摘要、認(rèn)識(shí)boot
    發(fā)表于 12-10 07:46

    介紹一種嵌入式裸機(jī)多任務(wù)切換方法

    一種嵌入式裸機(jī)多任務(wù)切換方法有時(shí)候?yàn)榱藢?shí)現(xiàn)些簡單的、對(duì)實(shí)時(shí)性要求不高的任務(wù),采用操作系統(tǒng)不僅增加了程序的復(fù)雜性,對(duì)低性能單片機(jī)的資源占用也是值得考慮的問題。這時(shí)候操作系統(tǒng)可能不是必要
    發(fā)表于 02-28 13:27

    有沒有一種方法可以使用codewarrior tap逐步調(diào)試固件映像?

    嗨,我使用的是基于 LS1046ARDB 的定制板,我在我的定制板中修改了幾個(gè)硬件組件(例如:Phy、EEPROM 等)。有沒有一種方法可以使用 codewarrior tap 逐步調(diào)試固件映像
    發(fā)表于 03-29 09:02

    什么是異步轉(zhuǎn)移模式

    什么是異步轉(zhuǎn)移模式 1、ATM的定義與功能 CCITT在I系列建議中給ATM下了這樣的定義:ATM是一種轉(zhuǎn)換模式(即前面所說的傳輸方式),在
    發(fā)表于 03-18 15:43 ?1172次閱讀

    異步傳輸模式工作原理簡介

    異步傳輸模式工作原理簡介 ATM(Asynchronous Transfer Mode)異步傳輸模式,是一種面向連接的快速分組交換技術(shù),建
    發(fā)表于 04-06 16:17 ?4379次閱讀

    一種新型的異步電動(dòng)機(jī)軟起動(dòng)器

    一種新型的異步電動(dòng)機(jī)軟起動(dòng)器 提出一種以AT89C51單片機(jī)為控制核心的新型異步電動(dòng)機(jī)軟起動(dòng)系
    發(fā)表于 04-10 21:45 ?1553次閱讀
    <b class='flag-5'>一種</b>新型的<b class='flag-5'>異步</b>電動(dòng)機(jī)軟起動(dòng)器

    Android異步任務(wù)處理

    移動(dòng)護(hù)理系統(tǒng)開發(fā)采用異步處理的方式,可以縮短執(zhí)行操作的時(shí)間,避免UI線程阻塞。筆者介紹了采用異步處理方式開發(fā)移動(dòng)護(hù)理程序的方法,并以移動(dòng)護(hù)理中的病人列表異步
    發(fā)表于 12-30 10:39 ?3707次閱讀

    文看懂異步傳輸模式atm的特點(diǎn)

    ATM是一種傳輸模式,在這模式中,信息被組織成信元,因包含來自某用戶信息的各個(gè)信元不需要周期性出現(xiàn),這種傳輸模式
    發(fā)表于 03-02 13:49 ?9031次閱讀
    <b class='flag-5'>一</b>文看懂<b class='flag-5'>異步</b>傳輸<b class='flag-5'>模式</b>atm的特點(diǎn)

    集成電路設(shè)計(jì)的一種運(yùn)作模式介紹

    眾所周知,在集成電路設(shè)計(jì)中其中的一種重要的運(yùn)行模式Fabless,它是Fabrication(制造)和less(無、沒有)的組合,是指“沒有制造業(yè)務(wù)、只專注于設(shè)計(jì)”的集成電路設(shè)計(jì)的一種運(yùn)作模式
    的頭像 發(fā)表于 07-07 15:50 ?4869次閱讀
    主站蜘蛛池模板: 美女撒尿无遮挡免费中国 | 一个人在线观看免费高清视频 | 囯产精品久久久久免费蜜桃 | 色婷婷粉嫩AV精品综合在线 | 国产中文字幕一区 | 成人人观看的免费毛片 | 纲手裸乳被爆白浆 | 日韩一区二区三区视频在线观看 | 999久久国产精品免费人妻 | 激情床戏揉胸吃胸视频 | 色综合伊人色综合网站下载 | 亚洲无遮挡无码A片在线 | 高清 国产 在线 亚洲 | 伊人在线视频 | 调教美丽的白丝袜麻麻视频 | 龙岩综合频道 | 在线观看视频亚洲 | 牢记永久免费网址 | 久久精品国产亚洲AV蜜臀 | 老色哥网站 | 9久久99久久久精品齐齐综合色圆 | 成人小视频在线免费观看 | 成 人 片 免费播放 成 人 免费 黄 色 网站无毒下载 | 日本大片免a费观看视频 | 亚洲精品91| 女人夜夜春 | 好男人好资源在线播放 | 国产精品美女久久久久浪潮AV | 99久久免费国产精品特黄 | 午夜在线观看免费完整直播网 | 国偷自产视频一区二区久 | 尿了么app| 国语自产二区高清国语自产拍 | 男污女XO猛烈的动态图 | a毛片基地免费全部视频 | 末班车动漫无删减免费 | 樱花草在线影视WWW日本动漫 | 做i爱视频30分钟免费 | 99热久久这里只精品国产WWW | 伊人久久国产精品 | 99久久久久国产精品免费 |