++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Async CTP Refresh

leave a comment »

ということで、Async CTP が更新されました。

今回のリフレッシュの大きな変更点は以下の通り。

  • Windows Phone 7 に対応
  • Visual Studio SP1 に対応
  • ライセンスが as-is(ありのままで。自己責任で自由に使える)に
  • 非同期の単体テストサンプル追加
  • 英語版以外の Visual Studio にもインストール可能に

ちなみに、今回、ドキュメントは古いままだったりするので注意。

「(C# Spec) Asynchronous Functions.docx 」は古いまま(VB のも同様)。「(Framework) Task-based Asynchronous Pattern.docx」と「(Dataflow) Introduction to TPL Dataflow.docx」は更新されてる。

以下、細かい変更点。

Awaiter の変更

await の実装に使う Awaiter の規約が変わりました(パフォーマンス向上が目的らしい)。Awaiter の自前実装でもしていない限りは変更の影響受けないはず。


bool BeginAwait(Action)
T EndAwait()


bool IsComplete
void OnComplete(Action)
T Current

これに伴い、内部実装も少し変更。

var task = AnotherTaskAsync();
var awaiter = task.GetAwaiter();
if (!awaiter.IsCompleted)    // タスク未完の場合
{
    state = State1;          // 次に復帰するときのための状態の記録
    awaiter.OnCompleted(a);
    return;                  // いったん処理を切り上げる
}
case State1:                 // 継続時に続きから開始するためのラベル
var y = awaiter.GetResult(); // タスクの結果を受け取り
awaiter = null;              // new: ガベコレ誘発用

IProgress

IProgress インターフェイスの名前空間が System.Threading から System に移動。

あと、System.Threading.EventProgress クラスは System.Progress クラスに変更。

SwitchTo 廃止

SynchronizationContext.SwitchTo と ThreadPool.SwitchTo が廃止されました。

素直に SynchronizationContext.SetSynchronizationContext するか、ConfigurableAwait を利用すべきとのこと。

追加

Socket クラスと Dns クラスに対する非同期メソッド追加。

TaskEx.FromResult (単なる値を Task でラップしてくれる)追加。

DataFlow

細かくは追っていないものの、System.Threading.Tasks.Dataflow.dll の方は結構色々と変更があるみたい。

例外処理

void な非同期メソッド中で起きた例外が、現在の SynchronizationContext に対して Post されるように。

他、いくつかバグフィックスがあったっぽい。

広告

Written by ufcpp

2011年4月13日 @ 18:11

カテゴリー: C#

Tagged with ,

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中

%d人のブロガーが「いいね」をつけました。