【发布时间】:2016-07-11 18:15:34
【问题描述】:
我一直在玩Linq to twitter,在经历了很多痛苦之后,终于得到了一些结果。此代码正在运行...
public IList<ITweet> BuildForAuthor(string author)
{
var result = new List<ITweet>();
context = context != null ? context : new TwitterContext(_auth);
var tweets = (from tweet in context.Status
where tweet.Type == StatusType.User &&
tweet.ScreenName == author
select tweet).Take(4).ToList();
if (tweets != null)
{
foreach (var tweet in tweets)
{
if (!tweet.Retweeted)
{
result.Add(new Tweet
{
Author = tweet.ScreenName,
Text = tweet.Text
});
}
else
{
result.Add(new Tweet
{
Author = tweet.RetweetedStatus.User.ScreenNameResponse,
Text = tweet.RetweetedStatus.Text,
Retweet = true,
RetweetedBy = tweet.ScreenName
});
}
}
}
return result;
}
我遇到的问题是它不是异步的(它需要错误处理)。我对异步有点陌生,因为它对我来说是全新的(多年来一直在 JavaScript 中这样做,所以这个概念被理解了)。 LinqToTwitter 的文档坚持它必须是异步的,但所有异步示例都不适用于我。
这完全是错误的......
public IList<ITweet> BuildForAuthor(string author)
{
var result = new List<ITweet>();
context = context != null ? context : new TwitterContext(_auth);
// This is the example as given in the LinqToTwitter documentation, but the 'await' command doesn't work - I see an error 'The name 'await' does not exist in the current context' - errr...
var tweets = await (from tweet in context.Status
where tweet.Type == StatusType.User &&
tweet.ScreenName == author
select tweet).ToListAsync();
// This code is completely wrong - I'm not sure what to do here - In JS I'd be looking at a callback, but C# seems to just continue after from the examples I've looked at, however 'tweets' is no longer a list, it's a 'Task' so not much use to me here.
if (tweets != null)
{
foreach (var tweet in tweets)
{
if (!tweet.Retweeted)
{
result.Add(new Tweet
{
Author = tweet.ScreenName,
Text = tweet.Text
});
}
else
{
result.Add(new Tweet
{
Author = tweet.RetweetedStatus.User.ScreenNameResponse,
Text = tweet.RetweetedStatus.Text,
Retweet = true,
RetweetedBy = tweet.ScreenName
});
}
}
}
这里的任何建议都将受到欢迎。我已经在谷歌文章和示例代码中搜索了几个小时,当我查看翻译时,这些示例与我的距离太远了,以至于我看不到从哪里开始——我认为奇怪的东西没有帮助我得到了“等待”错误,所以我担心我在某处吠叫错误的树。
第二天
在阅读了更多之后,我现在有了更多类似的东西......
var tweets = (from tweet in context.Status
where tweet.Type == StatusType.User &&
tweet.ScreenName == author
select tweet).Take(4).ToListAsync();
tweets.Wait();
if (tweets != null)
{
foreach (var tweet in tweets.Result)
{
...
(摘自第二个代码块)- 这似乎与在推文任务上手动调用 Wait() 方法工作得很好,但仍然没有回答为什么'await'关键字不'的问题没用。
【问题讨论】:
-
AFAIK 你不能在 Razor 视图中使用 await。 stackoverflow.com/questions/19182349/…stackoverflow.com/questions/32436756/…
-
请编辑您的问题以包含代码的封闭方法签名。
-
没有 - 这是一个剃刀脚本。
-
我尝试将相同的代码(不包括标记片段)移动到一个模型类中(一旦我得到这个概念,我最终会这样做)并且有完全相同的错误。
标签: c# asynchronous linq-to-twitter