System.Web.IHttpAsyncHandler
ファイルのダウンロードに使用する Web サイトの帯域幅を制限するために を実装しました。ユーザー帯域幅を定義したら、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
、コードの実行頻度を制御できなくなるため、実行に 1 秒もかからず、その差がダウンロードのスループットに反映されます。
だから、私の質問は次のとおりです。
ThreadPool.QueueUserWorkItem
チェック間隔を定義できますか?- そうでない場合、この要件を達成するための別のアプローチはありますか (帯域幅調整?)
- そうでない場合、ポニーを飼ってもいいですか?
ティア