我正在尝试了解正确的代码,以异步方式获取一组数据,当我无法访问用于检索数据的客户端库时。我指定了一个端点和一个日期范围,应该检索到一个播放列表。但目前的代码在调用Start()后从未返回。注意:此代码在WinForm中运行。我正在努力理解任务(Tasks),不想仅仅使用awaits或BackgroundWorker。我知道自己在某个地方走错了。
private void GoButtonClick(object sender, EventArgs e)
{
string baseUrl = "http://someserver/api";
var startDateTime = this._startDateTimePicker.Value;
var endDateTime = this._endDateTimePicker.Value;
_getPlaylistsFunc = delegate()
{
var client = new PlaylistExportClient(baseUrl);
return client.GetPlaylistsByDateRange(startDateTime, endDateTime).ToList();
};
var task = new Task<List<Playlist>>(_getPlaylistsFunc);
task.ContinueWith((t) => DisplayPlaylists(t.Result));
task.Start();
}
private void DisplayPlaylists(List<Playlist> playlists)
{
_queueDataGridView.DataSource = playlists;
}
更新 我做了这些更改,但现在应用程序似乎挂起了UI线程。
private void GoButtonClick(object sender, EventArgs e)
{
string baseUrl = "http://someserver/api";
var startDateTime = this._startDateTimePicker.Value;
var endDateTime = this._endDateTimePicker.Value;
var token = Task.Factory.CancellationToken;
var context = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() =>
{
var client = new PlaylistExportClient(baseUrl);
_queueDataGridView.DataSource = client.GetPlaylistsByDateRange(startDateTime, endDateTime).ToList();
},token,TaskCreationOptions.None,context);
}
GetPlaylistsByDateRange
中设置了断点,你能看到它确实被调用了吗? - user7116