在C#中从getter或setter调用异步方法最优雅的方式是什么?
这里有一些伪代码来帮助我解释。
async Task<IEnumerable> MyAsyncMethod()
{
return await DoSomethingAsync();
}
public IEnumerable MyList
{
get
{
//call MyAsyncMethod() here
}
}
发布于 2011-07-07 04:16:51
你不能异步调用它,因为没有异步属性支持,只有异步方法。因此,有两种选择,都利用了CTP中的异步方法实际上只是一个返回Task<T>
或Task
的方法这一事实。
// Make the property return a Task<T>
public Task<IEnumerable> MyList
{
get
{
// Just call the method
return MyAsyncMethod();
}
}
或者:
// Make the property blocking
public IEnumerable MyList
{
get
{
// Block via .Result
return MyAsyncMethod().Result;
}
}
发布于 2019-08-03 02:05:59
您可以像这样使用Task
:
public int SelectedTab
{
get => selected_tab;
set
{
selected_tab = value;
new Task(async () =>
{
await newTab.ScaleTo(0.8);
}).Start();
}
}
发布于 2015-04-02 15:15:50
我认为我们可以等待值首先返回null,然后获得真正的值,所以在纯MVVM (例如PCL项目)的情况下,我认为以下是最优雅的解决方案:
private IEnumerable myList;
public IEnumerable MyList
{
get
{
if(myList == null)
InitializeMyList();
return myList;
}
set
{
myList = value;
NotifyPropertyChanged();
}
}
private async void InitializeMyList()
{
MyList = await AzureService.GetMyList();
}
https://stackoverflow.com/questions/6602244
复制相似问题