Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#等待lambda函数_C#_Lambda_Async Await - Fatal编程技术网

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);