簡體   English   中英

SendOrPostCallback行為

[英]SendOrPostCallback behaviour

SendOrPostCallback表示將消息分派到同步上下文時要調用的方法。 在第一種情況下,我認為應該同步執行異步方法上的SendOrPostCallback點。 如果委托將指向異步委托,將會發生什么? 行為應如何改變?

更改前:

public class ViewModel
{
    public ViewModel()
    {
        SynchronizationContext.Current.Post(new SendOrPostCallback(SomeMethods), null);
    }

    private async void SomeMethods(object obj)
    {
        await Foo(obj);
    }

    private async Task Foo(object obj)
    {
        bool Canceled = false;
        while (!Canceled)
        {
            await Task.Delay(3000);
            //...
        }
    }
}

更改后:

public class ViewModelImproved
{
    public ViewModelImproved()
    {
        SynchronizationContext.Current.Post(new SendOrPostCallback(async (obj) => { await SomeMethods(obj); }), null);
    }

    private async Task SomeMethods(object obj)
    {
        await Foo(obj);
    }

    private async Task Foo(object obj)
    {
        bool Canceled = false;
        while (!Canceled)
        {
            await Task.Delay(3000);
        }
        //...
    }
}

沒有實質性差異。 在第一個代碼中,有一個async void ,而在第二個代碼中,有一個async void 在第二個代碼中, async void隱藏在lambda表達式內。

通常,應避免使用async void 在這種特殊情況下,因為您正在處理UI上下文,所以可能沒問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM