一度に1つのダウンロードしか実行されていないときに機能するこのコードがあります
using (System.IO.FileStream fs = System.IO.File.OpenRead(@"C:\HugeFile.GBD"))
{
using (System.IO.BinaryReader br = new System.IO.BinaryReader(fs))
{
Response.AddHeader("Cache-control", "private");
Response.AddHeader("Content-Type", "application/octet-stream");
Response.AddHeader("Content-Length", fs.Length.ToString());
Response.AddHeader("Content-Disposition", "filename=HugeFile.GBD");
Response.Flush();
float kbs = 20f;
while (fs.Position < fs.Length)
{
if (!Response.IsClientConnected)
break;
byte[] bytes = br.ReadBytes((int)Math.Truncate(1024 * kbs));
char[] c = UTF8Encoding.Default.GetChars(bytes);
Response.Write(c, 0, c.Length);
Response.Flush();
System.Threading.Thread.Sleep(1000);
}
Response.Flush();
}
}
しかし、2 つの同時接続を行う (同じブラウザーで 2 番目のダウンロードを開始する) と、2 番目の接続は最初の接続が完了するまで実行されません。
スレッドまたはタスクを使用すると、ヘッダーを追加するときにエラーが発生しResponse
ます...
同じブラウザで同時に 2 つ以上のダウンロードを実行できるようにするにはどうすればよいですか?