我实施了
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
,我无法控制代码执行的频率,因此执行不需要一秒钟,这一差异反映在下载吞吐量上。
所以,我的问题是:
-
我能定义吗?
线程池。队列用户工作项
检查间隔?
-
如果没有,是否有其他方法来实现这一要求(带宽限制?)
-
如果没有,我能要一匹小马吗?
蒂亚