0

したがって、リソースから応答を取得しようとする複数のスレッドがありますが、何らかの理由で、それらが別々のスレッドで実行されていても、各応答は、他のすべてがまだ待機中または閉じている場合にのみ返されます。私は使用してみ WebResponse response = await request.GetResponseAsync();ましたが、まず第一に、私はすでに別のスレッドを実行しているため、冗長に思えます。ビジュアルスタジオも教えてくれます

「await」演算子は、非同期メソッド内でのみ使用できます。このメソッドを「async」修飾子でマークし、戻り値の型を「Task」に変更することを検討してください。

何が起きてる?

編集(コード):

Start メソッド (シングルスレッドから呼び出される)

public void Start()
{
    if (!Started)
    {
        ByteAt = 0;
        request = (HttpWebRequest)WebRequest.Create(URL);
        request.Method = "GET";
        request.AddRange(ByteStart, ByteStart + ByteLength);
        downloadThread = new Thread(DownloadThreadWorker);
        downloadThread.Start();
        Started = true;
        Paused = false;
    }
}

スレッドをダウンロード:

private void DownloadThreadWorker()
        {
            WebResponse response = request.GetResponse();
            if (response != null)
            {
                if (!CheckRange(response))
                    Abort(String.Format("Multi part downloads not supported (Requested length: {0}, response length: {1})", ByteLength, response.ContentLength));
                else
                { ...
4

1 に答える 1

0

HTTP 1.1 RFC に従って、クライアントは 2 つ以下の同時接続を確立する必要があります。IE の最新バージョンについては不明ですが、以前の IE はこの制限 (レジストリ キーを使用して変更できます) を尊重し、一度に同じホストへの接続は 2 つまでしかありませんでした。これはあなたが経験している制限かもしれません...

またはServicePointManager.DefaultConnectionLimit2 以上に設定してみてください。

于 2014-03-17T17:23:29.060 に答える