3

次のようなコードがある場合:

let asyncReadToEnd (stream:Stream) = async {
  // Allocate 4kb buffer for downloading data
  let buffer = Array.zeroCreate (4 * 1024)
  use output = new MemoryStream()
  let reading = ref true

  while reading.Value do
    // Download one (at most) 4kb chunk and copy it
    let! count = stream.AsyncRead(buffer, 0, buffer.Length)
    output.Write(buffer, 0, count)
    reading := count > 0

  // Read all data into a string
  output.Seek(0L, SeekOrigin.Begin) |> ignore

  use sr = new StreamReader(output)
  return sr.ReadToEnd() 
}

use stream = httpResponse.GetResponseStream()
asyncReadToEnd stream |> Async.RunSynchronously

単に行うことと比較して、何か得たことがありますか

use stream = httpResponse.GetResponseStream()
use sr = new StreamReader(stream)
sr.ReadToEnd()

どちらの場合も、現在のスレッドをブロックしますが、最初のバージョンを使用してスレッド リソースを解放するという利点はありますか?

4

1 に答える 1

0

Async.RunSynchronously各ワークフローで使用している限り、async何も得られません。それを利用するには、完全に非同期のプログラムを作成する必要があります。その後、10,000 を同時に実行できるようになります。

于 2013-10-19T01:20:13.723 に答える