【F# + ASP.NET MVC】 非同期処理を行うには

◆ Controller

namespace Sample.Controllers

open System
open System.Web
open System.Web.Mvc
open System.Net

type HomeController() =
    inherit AsyncController()

    // 非同期処理
    member this.IndexAsync() =
        // 保留中の操作数を1増やす
        this.AsyncManager.OutstandingOperations.Increment() |> ignore
        // 非同期処理を実行
        async {
            // WebページのHTMLを取得
            let wc = new WebClient()
            let! html = wc.AsyncDownloadString(
                            new Uri("http://www.google.co.jp"))

            // 処理結果をコレクションに追加すると、
            // Completedメソッドの引数に自動的にバインドされる。
            this.AsyncManager.Parameters.["result"] <- html
            // 保留中の操作数を1減らす
            this.AsyncManager.OutstandingOperations.Decrement() |> ignore
        }
        |> Async.Start

    // 完了処理(AsyncManager.Parameters が自動的にバインドされる)
    member this.IndexCompleted(result : string) =
        // 非同期処理の結果をセット
        this.ViewData.["Html"] <- result
        this.View() :> ActionResult

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中