使用任务时如何return基于linq的查询windowsphone8.1
How to return a query based on linq when using a task windows phone 8.1
我是任务的新手,我想弄清楚如何对从 aync 方法返回的列表进行查询,通常我会做这样的事情,因为 obv linq 不是异步方法如何实现这有点儿
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
但是导致它从一个不起作用的任务中重新调整我的两种方法如下。
这从网络服务获取电影详细信息
public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{
var tcs = new TaskCompletionSource<List<MovieDetail>>();
string jsonresult = await WCFRESTServiceCall("GET", "movie_details");
var list = await Task.Run(() => jsonresult.Deserialize<MovieDetails>());
tcs.SetResult(list.movieDetaillist);
// for testing to show json being returned
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();
return await tcs.Task;
}
然后我想做的是建立一个搜索功能,让我可以按名称、描述、演员等等搜索电影。
public Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = await Task.Run(() => how do i query above here ???? >());
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
return await tcs.Task;
}
为了代码的完整性,我已经包含了我的电影详细信息 class:
public class MovieDetail
{
public string id { get; set; }
public string name { get; set; }
public string description { get; set; }
public string image { get; set; }
public string secondry_images { get; set; }
public string actor { get; set; }
public string actoress { get; set; }
public string director { get; set; }
public string music_director { get; set; }
public string release_date { get; set; }
public string tags { get; set; }
public string age_restriction { get; set; }
public string box_office { get; set; }
public string official_site { get; set; }
public string duration { get; set; }
public string writers { get; set; }
public int imdb { get; set; }
public string status { get; set; }
public string language { get; set; }
public string created { get; set; }
public string modified { get; set; }
public string movie_category_id { get; set; }
public string slug { get; set; }
public string movie_show_time_id { get; set; }
public string theatre_movie_screen_id { get; set; }
public string videous { get; set; }
public string videos { get; set; }
public string comming_soon { get; set; }
public string avg { get; set; }
}
public class MovieDetails
{
public List<MovieDetail> movieDetaillist { get; set; }
}
为什么在 GetMovieDetailsList
中使用 TaskCompletionSource
?
我会这样做:
public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{
string jsonresult = await WCFRESTServiceCall("GET", "movie_details");
var list = jsonresult.Deserialize<MovieDetails>();
return list.movieDetaillist;
}
您的 searchMovies
方法可能如下所示:
public async Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = _myMovie.Where(p => p.name == movietitle).ToList();
return list;
}
await
时间贵的东西。 如何 获得列表并不重要。你忘记了这个列表是在你得到它之后建立在一个任务中的。您可以像查询其他列表一样查询它。
在你的第一个等待的电话之后,你有结果,所以你可以做
public Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = await Task.Run(() => how do i query above here ???? >());
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
return await tcs.Task;
}
_myMovie.Where(x => x.Name == "title");
或您要搜索的任何属性
我是任务的新手,我想弄清楚如何对从 aync 方法返回的列表进行查询,通常我会做这样的事情,因为 obv linq 不是异步方法如何实现这有点儿
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
但是导致它从一个不起作用的任务中重新调整我的两种方法如下。
这从网络服务获取电影详细信息
public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{
var tcs = new TaskCompletionSource<List<MovieDetail>>();
string jsonresult = await WCFRESTServiceCall("GET", "movie_details");
var list = await Task.Run(() => jsonresult.Deserialize<MovieDetails>());
tcs.SetResult(list.movieDetaillist);
// for testing to show json being returned
var dialog = new MessageDialog(jsonresult);
await dialog.ShowAsync();
return await tcs.Task;
}
然后我想做的是建立一个搜索功能,让我可以按名称、描述、演员等等搜索电影。
public Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = await Task.Run(() => how do i query above here ???? >());
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
return await tcs.Task;
}
为了代码的完整性,我已经包含了我的电影详细信息 class:
public class MovieDetail
{
public string id { get; set; }
public string name { get; set; }
public string description { get; set; }
public string image { get; set; }
public string secondry_images { get; set; }
public string actor { get; set; }
public string actoress { get; set; }
public string director { get; set; }
public string music_director { get; set; }
public string release_date { get; set; }
public string tags { get; set; }
public string age_restriction { get; set; }
public string box_office { get; set; }
public string official_site { get; set; }
public string duration { get; set; }
public string writers { get; set; }
public int imdb { get; set; }
public string status { get; set; }
public string language { get; set; }
public string created { get; set; }
public string modified { get; set; }
public string movie_category_id { get; set; }
public string slug { get; set; }
public string movie_show_time_id { get; set; }
public string theatre_movie_screen_id { get; set; }
public string videous { get; set; }
public string videos { get; set; }
public string comming_soon { get; set; }
public string avg { get; set; }
}
public class MovieDetails
{
public List<MovieDetail> movieDetaillist { get; set; }
}
为什么在 GetMovieDetailsList
中使用 TaskCompletionSource
?
我会这样做:
public async Task<List<MovieDetail>> GetMovieDetailsList(int movieId)
{
string jsonresult = await WCFRESTServiceCall("GET", "movie_details");
var list = jsonresult.Deserialize<MovieDetails>();
return list.movieDetaillist;
}
您的 searchMovies
方法可能如下所示:
public async Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = _myMovie.Where(p => p.name == movietitle).ToList();
return list;
}
await
时间贵的东西。 如何 获得列表并不重要。你忘记了这个列表是在你得到它之后建立在一个任务中的。您可以像查询其他列表一样查询它。
在你的第一个等待的电话之后,你有结果,所以你可以做
public Task<List<MovieDetail>> searchMovies(string movietitle)
{
List <MovieDetail> _myMovie = await GetMovieDetailsList(1);
var list = await Task.Run(() => how do i query above here ???? >());
List<MovieDetail> _mySearchDetail = _myMovie.Where(p => p.name == movietitle).ToList();
return await tcs.Task;
}
_myMovie.Where(x => x.Name == "title");
或您要搜索的任何属性