Я внедрил 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
интервал проверки? - Если нет, есть ли другой подход для достижения этого требования (регулирование пропускной способности?)
- Если нет, могу ли я иметь пони?
ТИА