C# 4.0 lCharacters(ret.UserLocation)+“,,,,1,,“+ret.UserTweetCount+”,”+ ret.RetweetCount+”、“+ret.FavoriteCount+”、“+ret.UserFollowers”);

C# 4.0 lCharacters(ret.UserLocation)+“,,,,1,,“+ret.UserTweetCount+”,”+ ret.RetweetCount+”、“+ret.FavoriteCount+”、“+ret.UserFollowers”); ,c#-4.0,asynchronous,linq-to-twitter,C# 4.0,Asynchronous,Linq To Twitter,lCharacters(ret.UserLocation)+“,,,,1,,“+ret.UserTweetCount+”,”+ ret.RetweetCount+”、“+ret.FavoriteCount+”、“+ret.UserFollowers”); } }捕获(例外情况除外){ Console.WriteLine(“错误:+ex.Message+Environment.NewLine+ex.StackTrace”); } 返回; } 其他的 retweet=TwitterStatus.Re

lCharacters(ret.UserLocation)+“,,,,1,,“+ret.UserTweetCount+”,”+ ret.RetweetCount+”、“+ret.FavoriteCount+”、“+ret.UserFollowers”); } }捕获(例外情况除外){ Console.WriteLine(“错误:+ex.Message+Environment.NewLine+ex.StackTrace”); } 返回; } 其他的 retweet=TwitterStatus.Retweets(tokensRet,Decimal.Parse(tweet.Id.ToString()),retOpt); if(retweet.Result.ToString()=“成功”&&retweet.ResponseObject.Count>0&&retweet!=null) { int retPages=int.Parse(tweet.RetweetCountString.ToString())+1/20;
for(int page=0;page=0&&ret.CreatedDate.CompareTo(toDate)这应该是一条评论而不是答案。您好,感谢您的及时回复,因为我得到了一个聚合异常。在这里,try-catch可能不是最好的答案,我猜异常是在返回列表时产生的。异常的实际内容是什么?它是“mscorlib.dll中发生了“System.AggregateException”类型的异常,但未在用户代码中处理”如果使用Try-catch,则需要循环遍历该异常messages@RodBarrantes需要堆栈跟踪以获取更多信息。还应使用async/await模式,而不是Task.Wait()或Task.Result-否则会发生错误。请参阅“Steven Cleary的“不阻塞异步代码”:在异步方法上,我使用了wait(Task getRetweets),但在这个同步调用中,我不允许使用它。这是错误的输出。线程0x32b0已退出,代码为259(0x103)。线程0x494已退出,代码为259(0x103)。线程0x31b8已退出,代码为0(0x0)。线程0x1bd8已退出,代码为259(0x103)。我的错误:
code
位于System.Threading.Tasks.Task.ThrowifeException(布尔includeTaskCanceledException)
static async Task<List<myTwitterStatus>> getRetweets(ulong tweetID, TwitterContext twitterCtx)        
{
    List<myTwitterStatus> reTweets = new List<myTwitterStatus>();

    var publicTweets =
        await
        (from tweet in twitterCtx.Status
         where tweet.Type == StatusType.Retweets &&
               tweet.ID == tweetID
         select tweet)
         .ToListAsync();

    if (publicTweets != null)
        publicTweets.ForEach(tweet =>
        {
            if (tweet != null && tweet.User != null)
            {
                myTwitterStatus tempStatus = new myTwitterStatus();
                tempStatus.Country = tweet.Place.Country;
                tempStatus.createdAt = tweet.CreatedAt;
                tempStatus.FavoriteCount = long.Parse(tweet.FavoriteCount.ToString());
                tempStatus.ID = tweet.ID;
                tempStatus.isTruncated = tweet.Truncated;
                tempStatus.Lang = tweet.Lang;
                tempStatus.MaxID = tweet.MaxID;
                tempStatus.PlaceFullname = tweet.Place.FullName;
                tempStatus.RetweetCount = tweet.RetweetCount;
                tempStatus.ScreenName = tweet.ScreenName;
                tempStatus.Text = tweet.Text;
                tempStatus.UserFriends = tweet.User.FriendsCount;
                tempStatus.UserCreated = tweet.User.CreatedAt;
                tempStatus.UserFollowers = tweet.User.FollowersCount;
                tempStatus.UserFavorities = tweet.User.FavoritesCount;
                tempStatus.UserFriends = tweet.User.FriendsCount;
                tempStatus.UserLocation = tweet.User.Location;
                tempStatus.UserName = tweet.User.Name;
                tempStatus.UserTweetCount = tweet.User.StatusesCount;
                reTweets.Add(tempStatus);
            }
        });
        return reTweets;    
    }
var authorizer = new SingleUserAuthorizer
{
    CredentialStore = new InMemoryCredentialStore
    {
        ConsumerKey = SM.Default.Consumer_key2.ToString(),
        ConsumerSecret = SM.Default.Consumer_secret2.ToString(),
        OAuthToken = SM.Default.Access_token2.ToString(),
        OAuthTokenSecret = SM.Default.Access_secret2.ToString()
    }
};
TwitterContext twitterCtx = new TwitterContext(authorizer);

Task<List<myTwitterStatus>> task = Task<List<myTwitterStatus>>.Factory.StartNew(() => getRetweets(ulong.Parse(tweet.StringId), twitterCtx).Result);
task.Wait();                    
List<myTwitterStatus> tempList = task.Result.ToList<myTwitterStatus>();

foreach (var ret in tempList)
{
    un = file.RemoveSpecialCharacters(ret.UserName);
    sn = file.RemoveSpecialCharacters(ret.ScreenName);

    tweets.AppendLine(account + "," + getWE(ret.createdAt) + "," + Text + "," + un + "," + sn + "," + ret.createdAt + "," +
    file.RemoveSpecialCharacters(ret.UserLocation) + ",,,1,," + ret.UserTweetCount + "," +
    ret.RetweetCount + "," + ret.FavoriteCount + "," + ret.UserFollowers);
try
{
    //Perform your operation here
}
catch (AggregateException aex)
{
    //Dive into inner exception
}
   private void getRetweets(TwitterStatus tweet)
    {
        Text = file.RemoveSpecialCharacters(tweet.Text);
        tweetID = tweet.StringId;

        #region Get retweets
        RetweetsOptions retOpt = new RetweetsOptions();
        if (int.Parse(tweet.RetweetCountString.ToString()) > 1)
                retOpt.Count = int.Parse(tweet.RetweetCountString.ToString()) + 1;
            else
                retOpt.Count = 1;

        String errorText = "";

        DateTime fromDate, toDate;
        if (radDate.Checked == true)
        {
            fromDate = dtpFrom.Value;
            toDate = dtpTo.Value;
        }
        else
        {
            fromDate = tweet.CreatedDate;
            toDate = DateTime.Now;
        }

        TwitterResponse<TwitterStatusCollection> retweet = null;

        if (int.Parse(tweet.RetweetCountString.ToString()) > 100)
        {                                
            var authorizer = new SingleUserAuthorizer
            {
                CredentialStore = new InMemoryCredentialStore
                {
                    ConsumerKey = SM.Default.Consumer_key2.ToString(),
                    ConsumerSecret = SM.Default.Consumer_secret2.ToString(),
                    OAuthToken = SM.Default.Access_token2.ToString(),
                    OAuthTokenSecret = SM.Default.Access_secret2.ToString()
                }
            };
            TwitterContext twitterCtx = new TwitterContext(authorizer);

            //HELPER: https://www.youtube.com/watch?v=IONqMWGn9-w                                
            try
            {                        
                Task<List<myTwitterStatus>> task = null;
                Parallel.Invoke(
                    () =>
                    {
                        task = getRetweets(ulong.Parse(tweet.StringId), twitterCtx);
                        while (!task.IsCompleted)
                        {
                            Thread.Sleep(250);
                        }
                    });



                List<myTwitterStatus> tempList = task.Result.ToList<myTwitterStatus>();

                foreach (var ret in tempList)
                {
                    un = file.RemoveSpecialCharacters(ret.UserName);
                    sn = file.RemoveSpecialCharacters(ret.ScreenName ?? string.Empty);

                    tweets.AppendLine(account + "," + getWE(ret.createdAt) + "," + Text + "," + un + "," + sn + "," + ret.createdAt + "," +
                            file.RemoveSpecialCharacters(ret.UserLocation) + ",,,1,," + ret.UserTweetCount + "," +
                            ret.RetweetCount + "," + ret.FavoriteCount + "," + ret.UserFollowers);
                }
            }catch(Exception ex){
                Console.WriteLine("Error: " + ex.Message+ Environment.NewLine + ex.StackTrace);
            }
            return;
        }
        else
            retweet= TwitterStatus.Retweets(tokensRet, Decimal.Parse(tweet.Id.ToString()), retOpt);


        if (retweet.Result.ToString() == "Success" && retweet.ResponseObject.Count > 0 && retweet!=null)
        {                
            int retPages = int.Parse(tweet.RetweetCountString.ToString()) + 1 / 20;

            for (int page = 0; page <= retPages; page++)
            {
                try
                {
                    //List<TwitterStatus> retList = new List<TwitterStatus>(retweet.ResponseObject.Page = page);                    
                    retweet.ResponseObject.Page = page;
                    List<TwitterStatus> retList = retweet.ResponseObject.ToList<TwitterStatus>();

                    foreach (var ret in retList)
                    {

                        try
                        {
                            if (ret.CreatedDate.CompareTo(fromDate) >= 0 && ret.CreatedDate.CompareTo(toDate) <= 0)
                            {
                                #region Get UN Sync
                                getUN(ret, ref un, ref sn);
                                #endregion

                                tweets.AppendLine(account + "," + getWE(ret.CreatedDate) + "," + Text + "," + un + "," + sn + "," + ret.CreatedDate + "," +
                                    file.RemoveSpecialCharacters(ret.User.Location.ToString()) + ",,,1,," + ret.User.NumberOfStatuses.ToString() + "," +
                                    ret.RetweetCount + "," + ret.User.NumberOfFavorites.ToString() + "," + ret.User.NumberOfFollowers.ToString());

                            }
                            else if (tweet.CreatedDate.CompareTo(toDate) <= 0)//if the tweet's created date is lower than the from's date, exits the loop
                                break;
                        }
                        catch (NullReferenceException ex)
                        {
                            errorText = ex.Source + Environment.NewLine + ex.StackTrace;
                            continue;
                        }

                    }
                }
                catch (Exception ex)
                {
                    errorText = ex.Source + Environment.NewLine + ex.StackTrace;
                    //MessageBox.Show(ex.Message + Environment.NewLine + "Rate Limit was reached!" + Environment.NewLine +
                    //    "Wait an hour or try a shorter date range", "Rate Limit Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

            }
        }
        else if (error == false && retweet.Result.ToString() != "Success")
        {
            errorText = retweet.Result.ToString();
            MessageBox.Show("Retweets: Something went wrong!" + Environment.NewLine + errorText, "Error",
                MessageBoxButtons.OK, MessageBoxIcon.Error);
            error = true;
        }
    #endregion
    }