これが私の問題を保存してほしいように思われる場合は申し訳ありませんが、少し前に stact に出くわしたことがあり、慣れるのに便利なライブラリのようであり、目前の問題にはうまくいくと思います.
ソースコードを見てみましたが、そこにはたくさんあります!:) どこから始めればいいのかわからない。
私が必要としているのは、非同期 Web リクエストを定期的に送信し、結果をローカルに保存するコンポーネント (Actor?) です (結果の解析が最初に行われます)。他のスレッドは、さまざまなタイミングで結果を要求します。
私が見る限り、結果をリクエストした人に結果を返すには、スケジューラ、ファイバー、およびチャネルが必要です。次のようなもの:
private static readonly ConcurrentDictionary<Uri, ServerLoad> ServerLoads = new ConcurrentDictionary<string, ServerLoad>();
public Channel<Request<IEnumerable<ServerLoad>>> ServerLoadChannel { get; private set;
public LoadRetriever(Inbox inbox, Fiber fiber, Scheduler scheduler, ILoadBalancerConfiguration config)
{
this.inbox = inbox;
this.fiber = fiber;
this.scheduler = scheduler;
this.scheduler.Schedule(
0,
config.FetchIntervalMilliSecs,
fiber,
() =>
{
foreach (var server in config.Servers)
{
// need someway to send async web request to url in
// server.LoadRetrievalAddress and save/update result
// in ServerLoads dictionary
}
});
this.ServerLoadChannel = new ConsumerChannel<Request<IEnumerable<ServerLoad>>>(this.fiber,
request => request.Respond(ServerLoads.Values));
}
}
これは当面はすべて理論上のものであり、完全に間違っている可能性があります。私が抱えている主な問題は、非同期要求 (WebClient.DownloadStringAsync() および DownloadStringCompleted) を実行することです。AsyncResultChannel の逆を行うもの
ヒント/例/正しい方向へのプッシュをいただければ幸いです!
(stact のタグを作成しようとしましたが、私の評判は十分ではありません:S)