0
我實施了System.Web.IHttpAsyncHandler
以限制文件下載的網站帶寬使用情況。一旦定義了用戶帶寬,我需要每秒發送一次byte[]
(或準確的說是1000毫秒)。喜歡的東西:我可以爲ThreadPool.QueueUserWorkItem定義頻率檢查嗎?
public class DownloadHandler : IHttpAsyncHandler
{
public IAsyncResult BeginProcessRequest(
HttpContext context, AsyncCallback cb, object extraData)
{
// user can download that file?
DownloadAsync download = new DownloadAsync(...);
download.StartDownload()
return download;
}
}
class DownloadAsync : IAsyncResult
{
// ...
public void StartDownload()
{
ThreadPool.QueueUserWorkItem(new WaitCallback(startAsyncTask));
}
private void startAsyncTask(object state)
{
// ...
while (context.Response.IsClientConnected &&
offset < data.Arquivo.Tamanho)
{
// ... do stuff
context.Response.OutputStream.Write(buffer, 0, readCount);
// ... more stuff
Thread.Sleep(1000 - (int)elapsed.TotalMilliseconds);
}
}
}
一旦ThreadPool.QueueUserWorkItem
,我會失去對正在執行我的代碼頻率控制,所以它不會花一秒鐘來執行,而這種差距反映在下載的數據吞吐量。
所以,我的問題是:
- 我可以定義
ThreadPool.QueueUserWorkItem
檢查的間隔時間? - 如果沒有,是否有另一種方法來達到這個要求(帶寬節流?)
- 如果不是,我可以養小馬嗎?
TIA