I持ってファイルをダウンロードし、コンソールに私に語った、このコードファイルどのように大きいです:F#:最初のイベントに対して1つのアクションを1回だけ実行します。
use webClient = new WebClient()
let lockObj = new Object()
let mutable firstProgressEvent = true
let onProgress (progressEventArgs: DownloadProgressChangedEventArgs) =
lock lockObj (fun _->
if (firstProgressEvent) then
let totalSizeInMB = progressEventArgs.TotalBytesToReceive/1000000L
Console.WriteLine ("Starting download of {0}MB...", totalSizeInMB)
firstProgressEvent <- false
)
webClient.DownloadProgressChanged.Subscribe onProgress |> ignore
let task = webClient.DownloadFileTaskAsync (uri, Path.GetFileName(uri.LocalPath))
task.Wait()
同じことをする方法はありますが、どちらもロックも可変VARSを使用していますか?ここで
私はあなたがここに –
正確にどのようにジョンを怠惰なタイプを使用したいかもしれないと思いますか? – knocte
イベントを処理するたびに '.Force()'を呼び出すが、最初の値をベイク処理する必要があるため、動作しないので、怠け者ではできないと思います。 [memoizeパターン](https://blogs.msdn.microsoft.com/dsyme/2007/05/31/a-sample-of-the-memoization-pattern-in-f/)を使って見ることができます。値が変わるたびに(決して)印刷されます。しかし、これはすでに悪いことではないにしても、あなたと同じくらい冗長になります。 – Stuart