第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

是否有一種通用方法來定義既不接收 Action 也不接收 Func<Task> 的方法?

是否有一種通用方法來定義既不接收 Action 也不接收 Func<Task> 的方法?

C#
瀟瀟雨雨 2023-09-09 16:37:04
我有一個(gè)方法,通過在另一個(gè)方法之前和之后運(yùn)行一些邏輯來A包裝另一個(gè)方法的執(zhí)行。B該方法B可以是任務(wù),也可以不是。因此,為了能夠await在該方法B執(zhí)行任務(wù)時(shí),我必須實(shí)現(xiàn)兩次該A方法,如下所示:public async Task A(int id, Action<int> b){    try    {        await BeforeAsync(id);        b(id);        await AfterAsync(id);    }    catch (Exception ex)    {        Handle(ex, id);    }}public async Task A(int id, Func<int,Task> b){    try    {        await BeforeAsync(id);        await b(id);        await AfterAsync(id);    }    catch (Exception ex)    {        Handle(ex, id);    }}有沒有辦法避免重復(fù)?
查看完整描述

3 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

事實(shí)并非如此,假設(shè)一些愚蠢的事情,比如傳遞一個(gè)對(duì)象并使用強(qiáng)制轉(zhuǎn)換計(jì)數(shù)來測(cè)試它:)

那這個(gè)呢?

public Task A(int id, Action<int> b) => A(id, x => { b(a); return Task.CompletedTask; });

這樣你就不會(huì)重復(fù)代碼。


查看完整回答
反對(duì) 回復(fù) 2023-09-09
?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

使用 RX 觀察者模式實(shí)現(xiàn)。


source.Subscribe(o => Log.Write($"On Next {o}"));

或者如果您指定其他前置條件和后置條件


source

  .Do(_ => Log.Write("Before"))

  .Finally(()=> Log.Write("After"))

  .Subscribe(

    o => Log.Write($"On Next {o}"),

    exception => Log.Write($"On Error {exception}")

    () => Log.Write("On Completed"));

問題在于


try

{

    await BeforeAsync(id);

    b(id);

    await AfterAsync(id);

}

是你會(huì)假設(shè)下面的 Catch 實(shí)際上會(huì)捕獲所有異常,但事實(shí)并非如此,并且只有當(dāng)你等待或等待它時(shí)才會(huì)發(fā)生。簡(jiǎn)而言之,正確地做到這一點(diǎn)要復(fù)雜得多。


查看完整回答
反對(duì) 回復(fù) 2023-09-09
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

就在這里:


public async Task A(int id, Delegate b)

{

    try

    {

        await BeforeAsync(id);

        if (b.DynamicInvoke(id) is Task task) await task;

        await AfterAsync(id);

    }

    catch (Exception ex)

    {

        Handle(ex, id);

    }

}

但現(xiàn)在你失去了類型安全(因?yàn)槟憧梢酝ㄟ^任何委托)并且一無所獲。


Task.Run有 8 個(gè)重載是有原因的: https ://referencesource.microsoft.com/#q=task.run


查看完整回答
反對(duì) 回復(fù) 2023-09-09
  • 3 回答
  • 0 關(guān)注
  • 147 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)