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

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

關(guān)閉分配的含義和問題

關(guān)閉分配的含義和問題

C#
慕勒3428872 2021-04-10 09:15:44
我正在使用JetBrains Rider進(jìn)行C#編程,并且我猜想在使用ReSharper時(shí)也會(huì)出現(xiàn)此警告:我寫了這個(gè)函數(shù)GetTicket:public async Task<IEnumerable<Ticket>> GetTicket(int id){    return await _memoryCache.GetOrCreateAsync(_cachingFunctionalty.BuildCachingName(id), entry =>    {        entry.SlidingExpiration = TimeSpan.FromSeconds(10);        return GetTicket_uncached(id);    });}和GetTicket_uncached,它稱為:private async Task<IEnumerable<Ticket>> GetTicket_uncached(int id){    RestClient client = new RestClient(ServiceAdress);    Request req = new Request    {        Method = Method.GET,        Resource = "api/tickets/get",        Parameters = new {ident = id}    };    return await client.ExecuteRequestAsync<Ticket[]>(req);}因此,id方法中的參數(shù)public async Task<IEnumerable<Ticket>> GetTicket(int id)會(huì)以以下警告突出顯示:關(guān)閉分配:“ id”參數(shù)和“ this”參考在谷歌搜索時(shí)發(fā)現(xiàn)了一些東西,但我仍然不知道這意味著什么,這是什么問題?
查看完整描述

2 回答

?
慕村9548890

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

期望您進(jìn)行如下設(shè)計(jì):


public async Task<IEnumerable<Ticket>> GetTicket(int id)

{


    return await _memoryCache.GetOrCreateAsync(_cachingFunctionalty.BuildCachingName(id), entry =>

    {

        var localId = id;

        entry.SlidingExpiration = TimeSpan.FromSeconds(10);

        return GetTicket_uncached(localId);

    });

}

現(xiàn)在您沒有可以在閉包范圍之外修改的變量,Re-sharper會(huì)發(fā)出警告,只要理論上有可能在正在執(zhí)行的閉包之外修改變量,從而導(dǎo)致不可預(yù)測(cè)的結(jié)果。同樣適用于其他方法。在實(shí)際操作中,您應(yīng)該對(duì)所有其他對(duì)象遵循相同的操作,可以在閉包范圍之外對(duì)其進(jìn)行修改,從而創(chuàng)建本地版本


查看完整回答
反對(duì) 回復(fù) 2021-04-24
?
慕的地8271018

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

此消息來自“堆分配查看器”插件。創(chuàng)建lambda并傳遞Func給時(shí)GetOrCreateAsync,您要從調(diào)用方法(GetTicket)中捕獲一些值,并在以后使用它們。

編譯此代碼時(shí),編譯器會(huì)將此lambda重寫為一個(gè)保存值的類,以及一個(gè)主體與lambda主體相同的方法,盡管它將使用在此新類中捕獲的值,而不是原始的方法調(diào)用。

堆分配查看器插件的意思是,在運(yùn)行時(shí)這里發(fā)生了隱藏分配-正在分配此新的編譯器生成的類,分配了值并調(diào)用了方法。

插件告訴您id正在捕獲和分配此新類-在lambda中這很明顯,因?yàn)槟诖a中看到了它。但是您也正在捕獲this,因?yàn)樗?code>GetTicket_uncached是一個(gè)實(shí)例方法而不是靜態(tài)方法。沒有this,您將無法調(diào)用實(shí)例方法,因此idthis都將在編譯器生成的類中被捕獲和分配。

您無法擺脫id變量的分配,但是this如果您將其GetTicket_uncached設(shè)為靜態(tài),則可以擺脫引用(但這可能需要傳入ServiceAddress,在這種情況下,堆分配查看器會(huì)告訴您您正在關(guān)閉分配現(xiàn)在idServiceAddress)。

您可以在ReSharper幫助頁面中看到有關(guān)“隱式捕獲關(guān)閉”警告的更多詳細(xì)信息。在討論不同的場(chǎng)景和警告消息時(shí),有關(guān)分配類以捕獲變量的背景詳細(xì)信息很有用。


查看完整回答
反對(duì) 回復(fù) 2021-04-24
  • 2 回答
  • 0 關(guān)注
  • 191 瀏覽

添加回答

舉報(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)