如何使用Tweetinvi恢复已停止的Twitter Sample Stream V2采样流
问题根因
Tweetinvi的SampleStreamV2实例为单次生命周期设计,调用StopStream()方法后,实例内部维护的WebSocket连接、授权会话、事件绑定都会被释放销毁,原有实例无法再次调用StartAsync()重启流。
解决方法
- 方案1:每次需要启动采样流时新建实例
不需要复用已经停止的流实例,全局仅保留已完成授权的TwitterClient对象即可,每次拉取推文前重新创建流实例,不会产生额外的授权开销。参考实现逻辑如下:
// 全局初始化Twitter客户端,仅需执行1次 var twitterClient = new TwitterClient("你的consumerKey", "你的consumerSecret", "你的accessToken", "你的accessTokenSecret"); const int TargetTweetCount = 1000; int currentReceivedCount = 0; async Task StartSampleStreamAndProcess() { // 新建流实例 var sampleStreamV2 = twitterClient.StreamsV2.CreateSampleStream(); // 绑定推文接收事件 sampleStreamV2.TweetReceived += (_, eventArgs) => { currentReceivedCount++; // 达到拉取目标后停止流 if (currentReceivedCount >= TargetTweetCount) { sampleStreamV2.StopStream(); } // 此处可添加临时存储推文的逻辑 }; // 启动流 await sampleStreamV2.StartAsync(); // 流停止后执行计算任务 ExecuteCalculationWork(); // 重置计数,下次需要拉取时重新调用本方法即可 currentReceivedCount = 0; }
- 方案2:不停止流,用开关控制数据接收
如果需要避免频繁重建连接的开销,完全不需要调用StopStream()方法,仅在回调逻辑中新增处理开关:计算任务运行时,把收到的推文直接丢弃不计数,计算任务完成后恢复计数逻辑即可,无需对流本身做启停操作。
内容的提问来源于stack exchange,提问作者Rahul
相关产品推荐
相关产品推荐

