C#等待lambda函数
我将首先发布遇到问题的代码:C#等待lambda函数,c#,lambda,async-await,C#,Lambda,Async Await,我将首先发布遇到问题的代码: public async Task main() { Task t = func(); await t; list.ItemsSource = jlist; //jlist previously defined } public async Task func() { TwitterService service = new TwitterService(_cons
public async Task main()
{
Task t = func();
await t;
list.ItemsSource = jlist; //jlist previously defined
}
public async Task func()
{
TwitterService service = new TwitterService(_consumerKey, _consumerSecret);
service.AuthenticateWith(_accessToken, _accessTokenSecret);
TwitterGeoLocationSearch g = new TwitterGeoLocationSearch(40.758367, -73.982706, 25, 0);
SearchOptions s = new SearchOptions();
s.Geocode = g;
s.Q = "";
s.Count = 1;
service.Search(s, (statuses, response) => get_tweets(statuses, response));
void get_tweets(TwitterSearchResult statuses, TwitterResponse response)
{
//unimportant code
jlist.Add(info);
System.Diagnostics.Debug.WriteLine("done with get_tweets, jlist created");
}
我在运行get_tweets(..)函数时遇到问题(我认为是在另一个线程上),任务t没有像主函数中那样等待。基本上,我的问题是list.Itemsource=jlist是在get_tweets函数完成之前运行的。有没有人能为我提供解决方案或正确的方向?首先,为TwitterService创建一个搜索引擎。使用TaskCompletionSource
。比如:
public static Task<Tuple<TwitterSearchResult, TwitterResponse>> SearchAsync(this TwitterService service, SearchOptions options)
{
var tcs = new TaskCompletionSource<Tuple<TwitterSearchResult, TwitterResponse>>();
service.Search(options, (status, response) => tcs.SetResult(Tuple.Create(status, response)));
return tcs.Task;
}
您没有收到警告说您的func()
async方法不包含任何wait
语句吗?我认为您没有复制足够的代码让我们了解问题所在;例如,func()没有等待语句,因此应该同步运行。@antlersoft没有,有足够的代码。问题是他使用的方法接受回调,所以它是异步的,但它使用的是非任务异步模型。这是根本问题。
SearchOptions s = new SearchOptions();
s.Geocode = g;
s.Q = "";
s.Count = 1;
var result = await service.SearchAsync(s);
get_tweets(result.Item1, result.Item2);