C# 单独函数中的异步API调用
我有一个页面,在该页面中,我通过C# 单独函数中的异步API调用,c#,xamarin,xamarin.forms,async-await,C#,Xamarin,Xamarin.forms,Async Await,我有一个页面,在该页面中,我通过OnAppearing方法从API检索数据: protected override async void OnAppearing() { var content = await _client.GetStringAsync(Url); var footmarks = JsonConvert.DeserializeObject<List<Footmark>>(content); _footmarks = new Obs
OnAppearing
方法从API检索数据:
protected override async void OnAppearing()
{
var content = await _client.GetStringAsync(Url);
var footmarks = JsonConvert.DeserializeObject<List<Footmark>>(content);
_footmarks = new ObservableCollection<Footmark>(footmarks);
listView.ItemsSource = _footmarks;
base.OnAppearing();
}
然后是调用相同方法的事件处理程序:
void Handle_Refreshing(object sender, System.EventArgs e)
{
listView.ItemsSource = GetFootmarks();
listView.EndRefresh();
}
我该怎么做呢?我会这样做:
将api调用提取到单个方法中:
async Task<List<Footmark>> GetFootMarksAsync()
{
var content = await _client.GetStringAsync(Url);
return JsonConvert.DeserializeObject<List<Footmark>>(content);
}
异步任务GetFootMarksAsync()
{
var content=await\u client.GetStringAsync(Url);
返回JsonConvert.DeserializeObject(内容);
}
此方法可以在OnAppearing中调用
protected override async void OnAppearing()
{
_footmarks = new ObservableCollection<Footmark>(await GetFootMarksAsync());
listView.ItemsSource = _footmarks;
base.OnAppearing();
}
protected override async void OnAppearing()
{
_footmarks=新的ObservableCollection(等待GetFootMarksAsync());
listView.ItemsSource=\u足迹;
base.OnAppearing();
}
在EventHandler中,它可以以相同的方式使用。唯一的更改是用async关键字标记处理程序
async void Handle_Refreshing(object sender, System.EventArgs e)
{
_footmarks = new ObservableCollection<Footmark>(await GetFootMarksAsync());
listView.ItemsSource = _footmarks;
listView.EndRefresh();
}
async void Handle\u刷新(对象发送方,System.EventArgs e)
{
_footmarks=新的ObservableCollection(等待GetFootMarksAsync());
listView.ItemsSource=\u足迹;
EndRefresh();
}
所以最好将其移动到函数
将重复的功能提取到自己的功能中是一个明智的选择
async Task<ObservableCollection<Footmark>> GetFootmarks() {
var json = await _client.GetStringAsync(Url);
return JsonConvert.DeserializeObject<ObservableCollection<Footmark>>(json);
}
async Task<ObservableCollection<Footmark>> GetFootmarks() {
var json = await _client.GetStringAsync(Url);
return JsonConvert.DeserializeObject<ObservableCollection<Footmark>>(json);
}
public interface IFoomarkService {
Task<ObservableCollection<Footmark>> GetFootmarks();
}
protected override void OnAppearing() {
this.Appearing += Page_Appearing; //Subscribe to event
base.OnAppearing();
}
protected async void Page_Appearing(object sender, EventArgs args) {
listView.ItemsSource = await GetFootmarks(); //get data asynchronously
//this.Appearing -= Page_Appearing; //Unsubscribe (OPTIONAL but advised)
}
protected async void Handle_Refreshing(object sender, System.EventArgs e) {
listView.ItemsSource = await GetFootmarks(); //get data asynchronously
listView.EndRefresh();
}