![](/img/trans.png)
[英]difference between SendOrPostCallback and Action in multithreaded environment?
[英]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.