【发布时间】:2014-04-19 13:35:51
【问题描述】:
您好,我有一个包含许多后台工作人员的程序。这些后台工作人员除了监听名为“tweet”的变量的变化之外什么也不做,然后每个后台程序为每个“tweet”创建一个任务来处理它并准备好处理另一个 Tweet。
以下是每 1 秒或更短时间更新一次的 Tweet 类。
Tweet tweet = new Tweet();
public class Tweet : INotifyPropertyChanged
{
private ITweet lastTweet;
protected void OnPropertyChanged(PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, e);
}
protected void OnPropertyChanged(string propertyName)
{
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}
public ITweet LastTweet
{
get { return lastTweet; }
set
{
if (value != lastTweet)
{
lastTweet = value;
OnPropertyChanged("LastTweet");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
现在在我的 BackgroundWorker DoWork 实现中:
Del OnNewTweetEvent = delegate(object sender2, PropertyChangedEventArgs args)
{
Task task = null;
task = new Task(() =>
{
var mytweet = sender2 as Tweet;
var tweetText = mytweet.LastTweet.Text;
//copy the tweetText in case the mytweet variable changed ( not sure )
ProcessTweet( tweetText );
});
task.Start();
};
this.tweet.PropertyChanged += new PropertyChangedEventHandler(OnNewTweetEvent);
//wait and prepare for cancellation
var backgroundworker = sender as BackgroundWorker;
while (true)
{
Thread.Sleep(10);
if (backgroundworker.CancellationPending)
{
//remove the notification
this.tweet.PropertyChanged -= new PropertyChangedEventHandler(OnNewTweetEvent);
return;
}
}
}
这个代码逻辑对吗?如果推文源推文每 0.01 秒发布一次,我能全部获取吗?或者推文可能会在我的后台工作人员没有得到的情况下发生变化?
排队更好吗? 感谢您的帮助。
【问题讨论】:
标签: c# .net multithreading twitter queue