[英]AgrumenNullException in ThreadPool.QueueUserWorkItem
[英]Can I define frequency check for ThreadPool.QueueUserWorkItem?
我實現了System.Web.IHttpAsyncHandler
來限制網站帶寬用於文件下載。 定義用戶帶寬后,我需要每秒發送一個byte[]
(准確地說是1000毫秒)。 就像是:
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
您不應該像那樣死守一個PoolThread。 通常,任何使用Sleep()的線程解決方案都是可疑的。
您可以使用System.Threading.Timer
,我不確定准確性(大約〜20ms),但是它不會“漂移”。
計時器將替換委托中的while循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.