如果這看起來像我想爲我保存我的問題,但我之前偶然發現了問題,並且似乎它會是一個方便的庫,以便熟悉它,並且我認爲它可以很好地工作針對手頭的問題。使用stact做出異步請求
我看了一下源代碼,裏面有很多! :)不知道從哪裏開始。
我需要的是一個組件(Actor?),它會定期發送異步Web請求並在本地存儲結果(某些結果的解析將首先發生)。其他線程會在不同的時間要求結果。
從我所看到的,我需要一個調度程序,一個光纖和一個頻道來處理將結果返回給請求它們的人。沿着線的東西:
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)
我還要指出,Stact在1.0版本中處於尖銳的形式。如果你不小心,你可以削減自己。 :) –
感謝您的指導,我會試一試。希望這一切不會是致命的,不殺你的傷害會讓你變得更強壯! ;) –
如何提供給該演員的收件箱? – Damian