diff --git a/docs/csharp/programming-guide/concepts/async/index.md b/docs/csharp/programming-guide/concepts/async/index.md
index d9e85346843..8160568c204 100644
--- a/docs/csharp/programming-guide/concepts/async/index.md
+++ b/docs/csharp/programming-guide/concepts/async/index.md
@@ -9,11 +9,11 @@ ms.assetid: 9bcf896a-5826-4189-8c1a-3e35fa08243a
caps.latest.revision:
author: BillWagner
ms.author: wiwagn
-ms.openlocfilehash: b845bf6f31ef84c78dcfd84832036ca2f2c4cae4
-ms.sourcegitcommit: cec0525b2121c36198379525e69aa5388266db5b
+ms.openlocfilehash: 6822143df2d02c284d7506d180139c18cfbaf370
+ms.sourcegitcommit: 655fd4f78741967f80c409cef98347fdcf77857d
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 02/23/2018
+ms.lasthandoff: 02/28/2018
---
# Async および Await を使用した非同期プログラミング (C#)
パフォーマンスのボトルネックを回避しアプリケーション全体の応答性を向上させるために、非同期プログラミングを使用できます。 ただ、非同期アプリケーションを作成する従来の方法は複雑で、プログラムの作成、デバッグ、保守が困難な場合があります。
@@ -41,7 +41,7 @@ ms.lasthandoff: 02/23/2018
非同期ベースの方法は、非同期操作を設計する場合に選択できるオプションの一覧に、自動送信に相当するものを追加します。 つまり、開発者の少しの作業量で、従来の非同期プログラミングのすべての利点を取得できます。
## 非同期メソッドの作成の簡素化
- C# の [async](../../../../csharp/language-reference/keywords/async.md) キーワードと [await](../../../../csharp/language-reference/keywords/await.md) キーワードは、非同期プログラミングの中核です。 これら 2 つのキーワードを使用すると、同期メソッドの作成とほぼ同様の容易さで、.NET Framework、.NET Core または Windows ランタイムのリソースを使用して非同期メソッドを作成できます。 `async` および `await` を使用して定義する非同期メソッドは、*async メソッド*と呼ばれます。
+ C# の [async](../../../../csharp/language-reference/keywords/async.md) キーワードと [await](../../../../csharp/language-reference/keywords/await.md) キーワードは、非同期プログラミングの中核です。 これら 2 つのキーワードを使用すると、同期メソッドの作成とほぼ同様の容易さで、.NET Framework、.NET Core または Windows ランタイムのリソースを使用して非同期メソッドを作成できます。 `async` キーワードを使用して定義する非同期メソッドは、"*async メソッド*" として参照されます。
async メソッドの例を次に示します。 コードのほとんどは、見たことのあるものと思います。 コメントは、非同期性を作成するために追加した機能を明示しています。
@@ -92,21 +92,21 @@ string urlContents = await client.GetStringAsync();
- 戻り値の型は次のいずれかになります:
- - メソッドが、オペランドに TResult 型を持つステートメントを戻す場合、。
+ - メソッドが、オペランドに `TResult` 型を持つステートメントを戻す場合、。
- メソッドがステートメントを戻さない、またはオペランドを持たないステートメントを戻す場合、。
- - 非同期のイベント ハンドラーを作成する場合、`Void`。
+ - 非同期のイベント ハンドラーを作成する場合、`void`。
- `GetAwaiter` メソッドがあるその他の任意の型 (C# 7 以降)。
- 詳細については、このトピックで後述する「戻り値の型およびパラメーター」を参照してください。
+ 詳細については、「[戻り値の型およびパラメーター](#BKMK_ReturnTypesandParameters)」セクションを参照してください。
- メソッドには、通常は 1 つ以上の await 式があり、待機中の非同期操作が完了するまでメソッドを続行できないポイントをマークします。 この間メソッドは中断し、メソッドの呼び出し元にコントロールを戻します。 このトピックの次のセクションでは、中断ポイントで何が発生するかを説明します。
非同期のメソッドでは、指定のキーワードと型を使用して何を実行するかを示すと、コンパイラがその作業を引き継ぎます。作業には、中断されたメソッドの待機ポイントにコントロールが戻された場合に実行される作業を、継続的に追跡することも含まれます。 ループおよび例外処理など一部のルーチンのプロセスは、従来の非同期コードによる操作が困難な場合があります。 非同期のメソッドでは、同期ソリューションの場合と同様にこれらの要素を記述すると、問題が解決します。
- .NET Framework の以前のバージョンでの非同期性の詳細については、「[TPL と従来の .NET Framework 非同期プログラミング](http://msdn.microsoft.com/library/e7b31170-a156-433f-9f26-b1fc7cd1776f)」を参照してください。
+ .NET Framework の以前のバージョンでの非同期性の詳細については、「[TPL と従来の .NET Framework 非同期プログラミング](../../../../standard/parallel-programming/tpl-and-traditional-async-programming.md)」を参照してください。
## 非同期メソッドでの動作
非同期プログラミングでは理解が必要な最も重要なことは、コントロール フローがどのようにメソッドからのメソッドに移動するかということです。 次の図は、このプロセスについて説明します。
@@ -132,7 +132,7 @@ string urlContents = await client.GetStringAsync();
そのため、`AccessTheWebAsync` は await 演算子を使用してその進行を中断し、`AccessTheWebAsync` を呼び出したメソッドにコントロールを戻します。 `AccessTheWebAsync` は呼び出し元に `Task` を返します。 タスクは、ダウンロードされた文字列の長さの整数値を生成することの保証を表します。
> [!NOTE]
- > `GetStringAsync` (および、結果として `getStringTask`) が `AccessTheWebAsync` が待機する前に完了した場合、コントロールは `AccessTheWebAsync` に残ります。 `AccessTheWebAsync` を中断して後から戻ることは、呼び出された非同期プロセス (`getStringTask`) が既に完了していて、AccessTheWebSync が最終結果を待つ必要がない場合に、無駄になることがあります。
+ > `GetStringAsync` (および、結果として `getStringTask`) が `AccessTheWebAsync` が待機する前に完了した場合、コントロールは `AccessTheWebAsync` に残ります。 `AccessTheWebAsync` を中断して後から戻ることは、呼び出された非同期プロセス (`getStringTask`) が既に完了していて、`AccessTheWebSync` が最終結果を待つ必要がない場合に、無駄になることがあります。
呼び出し元 (この例ではイベント ハンドラー) の内部で、処理パターンが続行されます。 呼び出し元は `AccessTheWebAsync` からの結果に依存しない他の作業をすることもあり、または直ちに待機状態になることもあります。 イベント ハンドラーは `AccessTheWebAsync` を待機し、`AccessTheWebAsync` は、`GetStringAsync` を待機します。
@@ -146,7 +146,7 @@ string urlContents = await client.GetStringAsync();
## API の非同期メソッド
非同期のプログラミングをサポートする `GetStringAsync` などのメソッドがどこにあるのかということです。 .NET Framework 4.5 以降および .NET Core には、`async` および `await` で使用する多くのメンバーが含まれています。 メンバー名に付記されている "Async" というサフィックスと、その戻り値の型である または から識別できます。 たとえば、`System.IO.Stream` のクラスには、同期メソッドの 、、および と共に、、 および という同期メソッドが含まれています。
- Windows ランタイムにも、Windows アプリの `async` と `await` で使用できる多くのメソッドが含まれています。 詳細およびサンプル メソッドについては、「[クイック スタート: await 演算子を使用した非同期プログラミング](/previous-versions/windows/apps/hh452713(v=win.10))」、「[非同期プログラミング (Windows ストア アプリ)](/previous-versions/windows/apps/hh464924(v=win.10))」、および「[WhenAny: .NET Framework と Windows ランタイム間のブリッジ](https://msdn.microsoft.com/library/jj635140(v=vs.120).aspx)」を参照してください。
+ Windows ランタイムにも、Windows アプリの `async` と `await` で使用できる多くのメソッドが含まれています。 UWP 開発の詳細については、「[スレッド化と非同期プログラミング](/windows/uwp/threading-async/)」を参照してください。旧バージョンの Windows ランタイムを使用する場合は、「[非同期プログラミング (Windows ストア アプリ)](/previous-versions/windows/apps/hh464924(v=win.10))」および「[クイック スタート: await 演算子を使用した非同期プログラミング](/previous-versions/windows/apps/hh452713(v=win.10))」を参照してください。
## スレッド
非同期のメソッドは非ブロッキング操作を意図しています。 非同期のメソッドの `await` 式は、待機中のタスクの実行中に現在のスレッドをブロックしません。 代わりに、式はメソッドの残りの部分の継続を登録し、非同期のメソッドの呼び出し元にコントロールを戻します。
@@ -158,7 +158,7 @@ string urlContents = await client.GetStringAsync();
## async と await
[async](../../../../csharp/language-reference/keywords/async.md) 修飾子を使用して、メソッドが非同期メソッドであることを指定すると、次の 2 つの機能が有効になります。
-- マークされた非同期のメソッドは中断ポイントを示すために [await](../../../../csharp/language-reference/keywords/await.md) を使用できます。 await 演算子は、非同期のメソッドが、待機中の非同期のプロセスが完了するまでこのポイント以降を続行できないことを、コンパイラに指示します。 その間、コントロールは非同期のメソッドの呼び出し元に戻されます。
+- マークされた非同期のメソッドは中断ポイントを示すために [await](../../../../csharp/language-reference/keywords/await.md) を使用できます。 `await` 演算子は、非同期のメソッドが、待機中の非同期のプロセスが完了するまでこのポイント以降を続行できないことを、コンパイラに指示します。 その間、コントロールは非同期のメソッドの呼び出し元に戻されます。
非同期のメソッドの `await` 式での中断は、メソッドからの終了を意図するものではなく、`finally` ブロックは実行されません。
@@ -232,8 +232,7 @@ Windows ランタイム プログラミングの非同期 API には、タスク
-
-
-
- 詳細およびサンプルついては、「[クイック スタート: 非同期プログラミングに await 演算子を使用する](/previous-versions/windows/apps/hh452713(v=win.10))」を参照してください。
+
## 名前付け規則
慣例により、`async` 修飾子を持つメソッドの名前には、"Async" を追加します。
@@ -340,6 +339,8 @@ namespace AsyncFirstExample
// Length of the downloaded string: 41564.
```
-## 参照
+## 関連項目
[async](../../../../csharp/language-reference/keywords/async.md)
- [await](../../../../csharp/language-reference/keywords/await.md)
+ [await](../../../../csharp/language-reference/keywords/await.md)
+ [非同期プログラミング](../../../../csharp/async.md)
+ [非同期の概要](../../../../standard/async.md)
diff --git a/docs/csharp/programming-guide/strings/index.md b/docs/csharp/programming-guide/strings/index.md
index e05f0a3b5e0..4d52213de7f 100644
--- a/docs/csharp/programming-guide/strings/index.md
+++ b/docs/csharp/programming-guide/strings/index.md
@@ -12,11 +12,11 @@ ms.assetid: 21580405-cb25-4541-89d5-037846a38b07
caps.latest.revision:
author: BillWagner
ms.author: wiwagn
-ms.openlocfilehash: 24a030bb43d49615a7487ce10ad2347fdfd8a290
-ms.sourcegitcommit: 96cc82cac4650adfb65ba351506d8a8fbcd17b5c
+ms.openlocfilehash: 6492edae6e4311252dc664236fb43cd373f7c59f
+ms.sourcegitcommit: 655fd4f78741967f80c409cef98347fdcf77857d
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 02/19/2018
+ms.lasthandoff: 02/28/2018
---
# 文字列 (C# プログラミング ガイド)
文字列は、値がテキストの 型のオブジェクトです。 内部では、テキストは オブジェクトの順次読み取り専用コレクションとして格納されます。 C# の文字列の末尾には null 終端文字はありません。したがって、C# の文字列には任意の数の null 文字 ('\0') を埋め込むことができます。 文字列の プロパティは、Unicode 文字の数ではなく、文字列に含まれている `Char` オブジェクトの数を表します。 文字列内の個別の Unicode コード ポイントにアクセスするには、 オブジェクトを使用します。
@@ -83,7 +83,7 @@ ms.lasthandoff: 02/19/2018
メソッドのオーバーロードは、パラメーターとして書式指定文字列を受け取ります。 したがって、メソッドを明示的に呼び出さずに書式指定リテラル文字列を埋め込むことができます。 ただし、Visual Studio の **[出力]** ウィンドウにデバッグ出力を表示するために メソッドを使用する場合、 は書式文字列ではなく、文字列のみを受け入れるので、明示的に メソッドを呼び出す必要があります。 書式指定文字列の詳細については、「[型の書式設定](../../../standard/base-types/formatting-types.md)」を参照してください。
## 部分文字列
- 部分文字列は、1 つの文字列に含まれる一連の文字です。 元の文字列の一部から新しい文字列を作成するには、 メソッドを使用します。 メソッドを使用して、1 つまたは複数の部分文字列を検索できます。 指定されたすべての部分文字列を新しい文字列に置換するには、 メソッドを使用します。 メソッドと同様に、 は実際に新しい文字列を返し、元の文字列は変更しません。 詳細については、「[方法: String のメソッドを使用して文字列を検索する](../../../csharp/programming-guide/strings/how-to-search-strings-using-string-methods.md)」および「[方法: 文字列の内容を変更する](../../../csharp/programming-guide/strings/how-to-modify-string-contents.md)」を参照してください。
+ 部分文字列は、1 つの文字列に含まれる一連の文字です。 元の文字列の一部から新しい文字列を作成するには、 メソッドを使用します。 メソッドを使用して、1 つまたは複数の部分文字列を検索できます。 指定されたすべての部分文字列を新しい文字列に置換するには、 メソッドを使用します。 メソッドと同様に、 は実際に新しい文字列を返し、元の文字列は変更しません。 詳細については、「[How to: search strings](../../how-to/search-strings.md)」(方法: 文字列を検索する) および「[方法 : 文字列の内容を変更する](../../../csharp/programming-guide/strings/how-to-modify-string-contents.md)」を参照してください。
[!code-csharp[csProgGuideStrings#7](../../../csharp/programming-guide/strings/codesnippet/CSharp/index_7.cs)]
@@ -127,8 +127,7 @@ string s = String.Empty;
|[方法: 複数の文字列を連結する](../../../csharp/programming-guide/strings/how-to-concatenate-multiple-strings.md)|`+` 演算子と `Stringbuilder` クラスを使用して、コンパイル時および実行時に文字列を結合する方法について説明します。|
|[方法: 文字列を比較する](../../../csharp/programming-guide/strings/how-to-compare-strings.md)|文字列の序数比較を実行する方法を示します。|
|[方法: String.Split を使用して文字列を解析する](../../how-to/parse-strings-using-split.md)|`String.Split` メソッドを使用して文字列を解析するコード例を紹介します。|
-|[方法: String のメソッドを使用して文字列を検索する](../../../csharp/programming-guide/strings/how-to-search-strings-using-string-methods.md)|特定のメソッドを使用して文字列を検索する方法について説明します。|
-|[方法: 正規表現を使用して文字列を検索する](../../../csharp/programming-guide/strings/how-to-search-strings-using-regular-expressions.md)|正規表現を使用して文字列を検索する方法について説明します。|
+|[方法: 文字列を検索する](../../how-to/search-strings.md)|特定のメソッドを使用して文字列を検索する方法について説明します。|
|[方法: 文字列が数値を表しているかどうかを確認する](../../../csharp/programming-guide/strings/how-to-determine-whether-a-string-represents-a-numeric-value.md)|文字列を安全に解析して、有効な数値があるかどうかを確認する方法を示します。|
|[方法: 文字列を DateTime に変換する](../../../csharp/programming-guide/strings/how-to-convert-a-string-to-a-datetime.md)|"01/24/2008" などの文字列を、 オブジェクトに変換する方法を示します。|
|[基本的な文字列操作](../../../../docs/standard/base-types/basic-string-operations.md)| メソッドおよび メソッドを使用し文字列の基本操作を実行する、トピックへのリンクがあります。|
diff --git a/docs/csharp/quick-starts/hello-world.yml b/docs/csharp/quick-starts/hello-world.yml
index a91cf8500c4..7e9cea9515b 100644
--- a/docs/csharp/quick-starts/hello-world.yml
+++ b/docs/csharp/quick-starts/hello-world.yml
@@ -13,11 +13,11 @@ metadata:
ms.custom: mvc
ms.prod: .net
ms.technology: devlang-csharp
- ms.openlocfilehash: 7bc970e3c6eb93bf98323bd266b8c6a49f0cc1d0
- ms.sourcegitcommit: d2da0142247ef42a219a5d2907f153e62dc6ea0d
+ ms.openlocfilehash: b29e927275d674281ee176cc9d550b6c52b050ce
+ ms.sourcegitcommit: be1fb5d9447ad459bef22b91a91c72e3e0b2d916
ms.translationtype: HT
ms.contentlocale: ja-JP
- ms.lasthandoff: 02/01/2018
+ ms.lasthandoff: 02/09/2018
items:
- durationInMinutes: 1
content: "このクイックスタートでは C# を対話形式で学習できます。ブラウザーを使用して C# を記述し、コードをコンパイルして実行した結果を確認します。 このチュートリアルには、\"Hello World\" プログラムを開始する一連のレッスンが含まれています。 これらのレッスンでは、C# 言語の基本を説明します。\n"
@@ -32,11 +32,11 @@ items:
content: "先ほどの編集を通して、文字列を使って何ができるかを初めて確認しました。 さらに詳しく見てみましょう。\n\n`+` は C# において演算子と呼ばれるものの 1 つです。 `firstString + secondString` のように文字列に適用すると、1 つ目のテキストに 2 つ目のテキストが続く新しいテキストが作成されます。 これを*文字列の連結*と言います。 文字列変数も含めて、文字列をいくつでも連結できます。 これを試してみます。\n\n```csharp\nstring firstFriend = \"Maria\";\nstring secondFriend = \"Sage\";\nConsole.WriteLine($\"My friends are {firstFriend} and {secondFriend}\");\n```\n\n文字列についてさらに詳しく見ていきます。`Length` を使用して文字列の長さを知ることができます。 `Length` は文字列の**プロパティ**であり、その文字列の文字数を返します。 対話型ウィンドウの下部に次のコードを追加します。\n\n```csharp\nConsole.WriteLine($\"The name {firstFriend} has {firstFriend.Length} letters.\");\nConsole.WriteLine($\"The name {secondFriend} has {secondFriend.Length} letters.\");\n```\n\n> [!TIP]\n> このあたりで、自分で試してみるといいでしょう。 `Console.WriteLine()` を使用して画面にテキストを出力できることを学習しました。 変数を宣言して文字列同士を連結する方法についても学習しました。 対話型ウィンドウで実際に確認してみてください。 自分でより多くのメッセージを記述してみるとよいでしょう。 `+` 演算子を使用して文字列を作成してください。\n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
- title: "文字列の追加操作"
durationInMinutes: 5
- content: "メッセージを出力するのに **メソッド**を使用してきました。 **メソッド**は、何らかのアクションを実装したコードのブロックです。 メソッドに名前があることで、それにアクセスできます。 \n\n`string` 型には多くの便利なメソッドがあります。 メソッドと、それに関連した と メソッドを使ってみましょう。 これらのメソッドは、先頭と末尾にあるスペースを削除します。\n\n```csharp\nstring message = \" Hello World! \";\nConsole.WriteLine($\"[{message}]\");\n\nstring trimmedMessage = message.TrimStart();\nConsole.WriteLine($\"[{trimmedMessage}]\");\n\ntrimmedMessage = message.TrimEnd();\nConsole.WriteLine($\"[{trimmedMessage}]\");\n\ntrimmedMessage = message.Trim();\nConsole.WriteLine($\"[{trimmedMessage}]\");\n```\n\nこのサンプルでは、文字列を処理するための重要な概念のいくつかを説明しています。 文字列を操作するメソッドは、定位置に変更を加えるのではなく、新しい文字列オブジェクトを返します。 `Trim` メソッドのいずれかに対する各呼び出しは新しい文字列を返すが元のメッセージを変更しない、ということが確認できます。\n\n文字列を処理するメソッドは他にもあります。 たとえば、エディターやワード プロセッサで検索と置換のコマンドを使用したことがあるかもしれません。 メソッドはそれと似た処理を `string` で行います。 このメソッドは部分文字列を検索し、それを別のテキストに置き換えます。 メソッドは、2 つの**パラメーター**を受け取ります。 パラメーターは丸かっこ内の文字列です。 最初の文字列は、検索対象のテキストです。 2 つ目の文字列は、置換後のテキストです。 ご自分で試してみてください。 このコードを追加します。\n\n```csharp\nstring message = \"Hello World!\";\nConsole.WriteLine(message);\nmessage = message.Replace(\"Hello\", \"Greetings\");\nConsole.WriteLine(message);\n```\n\nその他にも役立つメソッドが 2 つあり、1 つは文字列のすべてを大文字にし、もう 1 つは文字列のすべてを小文字にします。 次のコードを試してみてください。\n\n```csharp\nstring message = \"Hello World!\";\nConsole.WriteLine(message);\nConsole.WriteLine(message.ToUpper());\nConsole.WriteLine(message.ToLower());\n```\n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
+ content: "メッセージを出力するのに **メソッド**を使用してきました。 **メソッド**は、何らかのアクションを実装したコードのブロックです。 メソッドに名前があることで、それにアクセスできます。 \n\n`string` 型には多くの便利なメソッドがあります。 メソッドと、それに関連した と メソッドを使ってみましょう。 これらのメソッドは、先頭と末尾にあるスペースを削除します。\n\n```csharp\nstring greeting = \" Hello World! \";\nConsole.WriteLine($\"[{greeting}]\");\n\nstring trimmedGreeting = greeting.TrimStart();\nConsole.WriteLine($\"[{trimmedGreeting}]\");\n\ntrimmedGreeting = greeting.TrimEnd();\nConsole.WriteLine($\"[{trimmedGreeting}]\");\n\ntrimmedGreeting = greeting.Trim();\nConsole.WriteLine($\"[{trimmedGreeting}]\");\n```\n\nこのサンプルでは、文字列を処理するための重要な概念のいくつかを説明しています。 文字列を操作するメソッドは、定位置に変更を加えるのではなく、新しい文字列オブジェクトを返します。 `Trim` メソッドのいずれかに対する各呼び出しは新しい文字列を返すが元のメッセージを変更しない、ということが確認できます。\n\n文字列を処理するメソッドは他にもあります。 たとえば、エディターやワード プロセッサで検索と置換のコマンドを使用したことがあるかもしれません。 メソッドはそれと似た処理を `string` で行います。 このメソッドは部分文字列を検索し、それを別のテキストに置き換えます。 メソッドは、2 つの**パラメーター**を受け取ります。 パラメーターは丸かっこ内の文字列です。 最初の文字列は、検索対象のテキストです。 2 つ目の文字列は、置換後のテキストです。 ご自分で試してみてください。 このコードを追加します。\n\n```csharp\nstring sayHello = \"Hello World!\";\nConsole.WriteLine(sayHello);\nsayHello = sayHello.Replace(\"Hello\", \"Greetings\");\nConsole.WriteLine(sayHello);\n```\n\nその他にも役立つメソッドが 2 つあり、1 つは文字列のすべてを大文字にし、もう 1 つは文字列のすべてを小文字にします。 次のコードを試してみてください。\n\n```csharp\nConsole.WriteLine(sayHello.ToUpper());\nConsole.WriteLine(sayHello.ToLower());\n```\n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
- title: "検索文字列"
durationInMinutes: 10
- content: "*検索と置換*の演算子は他にも、文字列内のテキストを検索できます。 検索には メソッドを使用できます。 これにより、文字列内に部分文字列が含まれているかどうかを確認できます。 次のコードを試してみて、 を確認してください。\n\n```csharp\nstring message = \"You say goodbye, and I say hello\";\nConsole.WriteLine(message.Contains(\"goodbye\"));\nConsole.WriteLine(message.Contains(\"greetings\"));\n```\n\n メソッドは**ブール値**を返し、検索した文字列が見つかったかどうかを知らせます。 **ブール値**は `true` か `false` どちらかの値を格納します。 **ブール値**については、この後のレッスンで詳しく学習します。\n\n***課題***\n\n似たような 2 つのメソッドがあり、 と も文字列内の部分文字列を検索します。 これらは文字列の先頭または末尾の部分文字列を検索します。 先述のサンプルを変更して、 の代わりに と を使用してみてください。 文字列の先頭にある \"You\" または \"goodbye\" を検索します。 文字列の末尾にある \"hello\" または \"goodbye\" を検索します。\n\n> [!Note]\n> 文字列の末尾にあるテキストをテストするときは、句読点に注意します。 文字列が句点で終わる場合は、末尾に句点を含めた文字列を検索する必要があります。\n\n先頭が \"You\" で末尾が \"hello\" の場合は `true`、先頭または末尾が \"goodbye\" の場合は false になります。 \n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
+ content: "*検索と置換*の演算子は他にも、文字列内のテキストを検索できます。 検索には メソッドを使用できます。 これにより、文字列内に部分文字列が含まれているかどうかを確認できます。 次のコードを試してみて、 を確認してください。\n\n```csharp\nstring songLyrics = \"You say goodbye, and I say hello\";\nConsole.WriteLine(songLyrics.Contains(\"goodbye\"));\nConsole.WriteLine(songLyrics.Contains(\"greetings\"));\n```\n\n メソッドは**ブール値**を返し、検索した文字列が見つかったかどうかを知らせます。 **ブール値**は `true` か `false` どちらかの値を格納します。 **ブール値**については、この後のレッスンで詳しく学習します。\n\n***課題***\n\n似たような 2 つのメソッドがあり、 と も文字列内の部分文字列を検索します。 これらは文字列の先頭または末尾の部分文字列を検索します。 先述のサンプルを変更して、 の代わりに と を使用してみてください。 文字列の先頭にある \"You\" または \"goodbye\" を検索します。 文字列の末尾にある \"hello\" または \"goodbye\" を検索します。\n\n> [!Note]\n> 文字列の末尾にあるテキストをテストするときは、句読点に注意します。 文字列が句点で終わる場合は、末尾に句点を含めた文字列を検索する必要があります。\n\n先頭が \"You\" で末尾が \"hello\" の場合は `true`、先頭または末尾が \"goodbye\" の場合は false になります。 \n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
- title: "課題完了"
durationInMinutes: 3
- content: "コードは次のようになりましたか?\n\n```csharp\nstring message = \"You say goodbye, and I say hello\";\nConsole.WriteLine(message.StartsWith(\"You\"));\nConsole.WriteLine(message.StartsWith(\"goodbye\"));\n\nConsole.WriteLine(message.EndsWith(\"hello\"));\nConsole.WriteLine(message.EndsWith(\"goodbye\"));\n```\n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
+ content: "コードは次のようになりましたか?\n\n```csharp\nstring songLyrics = \"You say goodbye, and I say hello\";\nConsole.WriteLine(songLyrics.StartsWith(\"You\"));\nConsole.WriteLine(songLyrics.StartsWith(\"goodbye\"));\n\nConsole.WriteLine(songLyrics.EndsWith(\"hello\"));\nConsole.WriteLine(songLyrics.EndsWith(\"goodbye\"));\n```\n\n> [!NOTE]\n> このオンライン コーディング体験はプレビュー モードです。 問題が生じた場合は、[dotnet/try リポジトリ](https://github.com/dotnet/try/issues)でその問題をお知らせください。\n"
- content: "\"Hello C#\" クイックスタートはこれで終了です。\n\n`string` 型の機能の詳細については、「[C# プログラミング ガイド](../programming-guide/index.md)」の[文字列](../programming-guide/strings/index.md)に関するトピックで学習できます。\n[文字列のヒント](../how-to/index.md#strings)に関するページを参照してください。\0"
diff --git a/docs/csharp/roslyn-sdk/toc.md b/docs/csharp/roslyn-sdk/toc.md
index f792912f3a5..9777d3fa3ea 100644
--- a/docs/csharp/roslyn-sdk/toc.md
+++ b/docs/csharp/roslyn-sdk/toc.md
@@ -4,23 +4,23 @@
## [セマンティクスの使用](work-with-semantics.md)
## [ワークスペースの使用](work-with-workspace.md)
-
+## クイック スタート
+### [構文の解析](get-started/syntax-analysis.md)
+### [セマンティック解析](get-started/semantic-analysis.md)
-
\ No newline at end of file
+ are "How To" vs. Samples. -->
+
\ No newline at end of file
diff --git a/docs/standard/analyzers/api-analyzer.md b/docs/standard/analyzers/api-analyzer.md
new file mode 100644
index 00000000000..7525f0a8064
--- /dev/null
+++ b/docs/standard/analyzers/api-analyzer.md
@@ -0,0 +1,117 @@
+---
+title: ".NET API アナライザー"
+description: "非推奨の API およびプラットフォームの互換性の問題を検出するのに .NET API アナライザーがどのように役立つかについて説明します。"
+author: oliag
+ms.author: mairaw
+ms.date: 01/30/2018
+ms.topic: article
+ms.prod: .net
+ms.technology: dotnet-standard
+ms.openlocfilehash: 81ab7e32b2af6048d822243226f1054ebd1ca419
+ms.sourcegitcommit: cf22b29db780e532e1090c6e755aa52d28273fa6
+ms.translationtype: HT
+ms.contentlocale: ja-JP
+ms.lasthandoff: 02/01/2018
+---
+# .NET API アナライザー
+
+.NET API アナライザーは、さまざまなプラットフォームでの C# API の互換性リスクの可能性および非推奨 API の呼び出しを検出する Roslyn アナライザーです。 開発のすべての段階ですべての C# 開発者に役立ちます。
+
+API アナライザーは、NuGet パッケージ [Microsoft.DotNet.Analyzers.Compatibility](https://www.nuget.org/packages/Microsoft.DotNet.Analyzers.Compatibility/) として提供されています。 プロジェクトでこれを参照すると、コードが自動的に監視されて、問題のある API 使用が示されます。 また、電球アイコンをクリックすると、考えられる修正方法の提案を得ることもできます。 ドロップダウン メニューには、警告を抑制するオプションが含まれます。
+
+> [!NOTE]
+> .NET API アナライザーは、まだプレリリース バージョンです。
+
+## 必須コンポーネント
+
+* Visual Studio 2017 または Visual Studio for Mac (すべてのバージョン)。
+
+## 非推奨 API の検出
+
+### 非推奨 API とは
+
+.NET ファミリは大規模な製品のセットであり、より適切に顧客のニーズに対応するため頻繁にアップグレードされています。 当然、API が廃止されたり新しいものに置き換えられたりすることがあります。 より優れた代替 API が存在する API は、非推奨と見なされます。 API が非推奨であり使ってはならないことを通知する手段の 1 つは、 属性で API をマークすることです。 この方法の欠点は、すべての非推奨 API に対して診断 ID が 1 つしかないことです (C# の場合、[CS0612](../../csharp/misc/cs0612.md))。 これによって、次のことが起こります。
+- ケースごとに専用のドキュメントを作成できません。
+- 特定のカテゴリの警告を抑制できません。 すべてを抑制するか、まったく抑制しないかです。
+- 新しい非推奨 API をユーザーに通知するには、参照されているアセンブリまたは対象のパッケージを更新する必要があります。
+
+API アナライザーは、DE (Deprecation Error の略) で始まる API 固有のエラー コードを使うので、個々の警告の表示を制御できます。 アナライザーによって識別された非推奨の API は、[dotnet/platform-compat](https://github.com/dotnet/platform-compat) リポジトリで定義されています。
+
+### API アナライザーの使用
+
+非推奨 API ( など) がコードで使われていると、API アナライザーは緑の波線でそれを強調します。 API 呼び出しをポイントすると、次の例のように、電球アイコンと API の非推奨に関する情報が表示されます。
+
+
+
+**[エラー一覧]** ウィンドウには、非推奨の API ごとに一意の ID を含む警告が表示されます。次に示すのは `DE004` の例です。
+
+!["警告の ID と説明が表示されている [エラー一覧] ウィンドウのスクリーンショット"](media/api-analyzer/warnings.jpg)
+
+ID をクリックすると、API が非推奨になった理由に関する詳細情報と、使用できる代替 API に関する提案が表示される Web ページに移動します。
+
+強調表示されたメンバーを右クリックして **[\<診断 ID> の非表示]** を選ぶと、警告を抑制できます。 警告を抑制するには 2 つの方法があります。
+
+* [ローカル (ソース内)](#suppressing-warnings-locally)
+* [グローバル (抑制ファイル内)](#suppressing-warnings-globally) - 推奨
+
+### 警告をローカルに抑制する
+
+警告をローカルに抑制するには、警告を抑制するメンバーを右クリックして、**[クイック アクションとリファクタリング]** > **[\<*診断 ID*> の非表示]** > **[ソース内]** の順に選びます。 [#pragma](../../csharp/language-reference/preprocessor-directives/preprocessor-pragma-warning.md) 警告プリプロセッサ ディレクティブが、定義されているスコープ内のソース コードに追加されます。
+
+### 警告をグローバルに抑制する
+
+警告をグローバルに抑制するには、警告を抑制するメンバーを右クリックして、**[クイック アクションとリファクタリング]** > **[\<*診断 ID*> の非表示]** > **[抑制ファイル内]** の順に選びます。
+
+
+
+最初の抑制後に、*GlobalSuppressions.cs* ファイルがプロジェクトに追加されます。 新しいグローバル抑制は、このファイルに追加されます。
+
+
+
+グローバル抑制は、プロジェクト間で API 使用の一貫性を確保するのに推奨される方法です。
+
+## クロスプラットフォームの問題の検出
+
+非推奨 API と同様に、アナライザーはクロスプラットフォームではないすべての API を識別します。 たとえば、 は Windows では動作しますが、Linux や macOS では動作しません。 診断 ID は、**[エラー一覧]** ウィンドウに表示されます。 右クリックして **[クイック アクションとリファクタリング]** を選ぶことで、その警告を抑制することができます。 2 つのオプション (非推奨のメンバーを使い続けて警告を抑制するか、まったく使わない) がある非推奨の場合とは異なり、特定のプラットフォーム用にのみコードを開発している場合は、コードを実行する予定のない他のすべてのプラットフォームですべての警告を抑制できます。 そのために必要なことは、プロジェクト ファイルを編集し、無視するすべてのプラットフォームを列記した `PlatformCompatIgnore` プロパティを追加するだけです。 指定できる値は、`Linux`、`MacOSX`、`Windows` です。
+
+```xml
+
+ Linux;MacOS
+
+```
+
+コードが複数のプラットフォームを対象にしていて、一部のプラットフォームでサポートされていない API を利用したい場合は、`if` ステートメントを使ってコードのその部分を保護できます。
+
+```csharp
+if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
+{
+ var w = Console.WindowWidth;
+ // More code
+}
+```
+
+また、対象のフレームワーク/オペレーティング システムごとに条件付きでコンパイルすることもできますが、現在は[手動で](../frameworks.md#how-to-specify-target-frameworks)行う必要があります。
+
+## サポートされている診断
+
+現時点では、アナライザーは次のケースを処理します。
+
+* (PC001) をスローする .NET Standard API の使用。
+* .NET Framework 4.6.1 (PC002) では利用できない .NET Standard API の使用。
+* UWP (PC003) に存在しないネイティブ API の使用。
+* 非推奨 (DEXXXX) としてマークされている API の使用。
+
+## CI マシン
+
+これらの診断はすべて、IDE で利用できるだけでなく、プロジェクトのビルドの一部としてコマンド ラインでも利用でき、これには CI サーバーが含まれます。
+
+## 構成
+
+ユーザーは、診断の処理方法を決定します (警告、エラー、提案、オフ)。 たとえば、設計者は、互換性の問題をエラーとして扱い、一部の非推奨 API の呼び出しでは警告を生成し、それ以外については提案を生成するだけにする、といったことを決定できます。 これを、診断 ID 別およびプロジェクト別に構成できます。 そのためには、**ソリューション エクスプローラー**で、プロジェクトの **[依存関係]** ノードに移動します。 ノード **[依存関係]** > **[アナライザー]** > **[Microsoft.DotNet.Analyzers.Compatibility]** を展開します。 診断 ID を右クリックし、**[ルール セットの重要度を設定]** を選んで、目的のオプションを選びます。
+
+
+
+## 関連項目
+
+* 「[Introducing API Analyzer](https://blogs.msdn.microsoft.com/dotnet/2017/10/31/introducing-api-analyzer/)」(API アナライザーの概要) のブログ投稿。
+* YouTube の「[API Analyzer](https://youtu.be/eeBEahYXGd0)」(API アナライザー) デモ ビデオ。
diff --git a/docs/standard/analyzers/index.md b/docs/standard/analyzers/index.md
new file mode 100644
index 00000000000..81c61cb9b76
--- /dev/null
+++ b/docs/standard/analyzers/index.md
@@ -0,0 +1,40 @@
+---
+title: "Roslyn ベースのアナライザー - .NET"
+description: "問題を検出し、各問題について修正を提案する Roslyn ベースのアナライザーについて説明します。"
+keywords: .NET, .NET Core
+author: billwagner
+ms.author: billwagner
+ms.date: 01/24/2018
+ms.topic: article
+ms.prod: .net
+ms.technology: dotnet-standard
+ms.devlang: dotnet
+ms.openlocfilehash: 8c6524716ba403bc426df8dc33e64b8b2934d3d7
+ms.sourcegitcommit: 3a96c706e4dbb4667bf3bf37edac9e1666646f93
+ms.translationtype: HT
+ms.contentlocale: ja-JP
+ms.lasthandoff: 02/27/2018
+---
+# Roslyn ベースのアナライザー
+
+Roslyn ベースのアナライザーでは、.NET Compiler SDK (Roslyn の API) を使用して、プロジェクトのソース コードを分析し、問題の検出と修正の提案を行います。 検出する問題のクラスは、バグを起こしやすい慣習から API の互換性に関するセキュリティの問題まで、アナライザーによってさまざまです。
+
+Roslyn ベースのアナライザーは対話型であり、ビルド中にも動作します。 Visual Studio またはコマンド ラインからビルドする際に、アナライザーはさまざまなガイダンスを提供します。
+
+Visual Studio でコードを編集する場合、コードを変更するとアナライザーが実行され、問題を含むコードの作成後すぐに考えられる問題がキャッチされます。 すべての問題は波線で強調表示されます。 Visual Studio に表示される電球をクリックすると、その問題に対して考えられる修正方法がアナライザーによって提案されます。 Visual Studio またはコマンド ラインでプロジェクトをビルドすると、すべてのソース コードが分析され、潜在的な問題の全リストがアナライザーによって示されます。 次の図に例を示します。
+
+
+
+Roslyn ベースのアナライザーでは、エラー、警告、または問題の重大度に基づく情報として、潜在的な問題が報告されます。
+
+Roslyn ベースのアナライザーは、プロジェクト内に NuGet パッケージとしてインストールします。 構成されたアナライザーと各アナライザーに対するすべての設定は復元され、そのプロジェクト用の任意の開発者のマシンで実行されます。
+
+> [!NOTE]
+> Roslyn ベースのアナライザーのユーザー エクスペリエンスは、FxCop の旧バージョンのようなコード分析ライブラリや、セキュリティ分析ツールとは異なるものです。 明示的に Roslyn ベースのアナライザーを実行する必要はありません。 Visual Studio の [分析] メニューで [コード分析の実行] メニュー項目を使用する必要はありません。 Roslyn ベースのアナライザーは、ユーザーの作業と同期して実行されます。
+
+## 特定のアナライザーについての詳細
+
+このセクションでは、次のアナライザーについて説明します。
+
+[API アナライザー](api-analyzer.md): このアナライザーでは、コードの互換性の潜在的リスクや、非推奨の API の使用が調べられます。
+[フレームワーク アナライザー](framework-analyzer.md): このアナライザーでは、コードが .NET Framework アプリケーションのガイドラインに従っているかどうかが調べられます。 これらの規則には、セキュリティに基づく推奨事項がいくつか含まれます。
diff --git a/docs/standard/analyzers/portability-analyzer.md b/docs/standard/analyzers/portability-analyzer.md
new file mode 100644
index 00000000000..b59b2821e63
--- /dev/null
+++ b/docs/standard/analyzers/portability-analyzer.md
@@ -0,0 +1,55 @@
+---
+title: .NET Portability Analyzer - .NET
+description: ".NET Portability Analyzer ツールを使って、さまざまな .NET の実装 (.NET Core、.NET Standard、UWP、Xamarin など) の間でのコードの移植性を評価する方法について説明します。"
+keywords: .NET, .NET Core
+author: blackdwarf
+ms.author: mairaw
+ms.date: 07/26/2017
+ms.topic: article
+ms.prod: .net
+ms.technology: dotnet-standard
+ms.devlang: dotnet
+ms.assetid: 0375250f-5704-4993-a6d5-e21c499cea1e
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 7e3d628fe4b4a8f01e692a70892658fceeb87953
+ms.sourcegitcommit: 75a180acb5d8a2dbd4a52915ce8e980749fb1d05
+ms.translationtype: HT
+ms.contentlocale: ja-JP
+ms.lasthandoff: 02/24/2018
+---
+# .NET Portability Analyzer
+
+ライブラリをマルチプラットフォーム対応にしたい場合や、 アプリケーションで他の .NET の実装とプロファイル (.NET Core、.NET Standard、UWP、Xamarin for iOS/Android/Mac など) との互換性を確保するのに必要な作業量を知りたい場合は、 [.NET Portability Analyzer](http://go.microsoft.com/fwlink/?LinkID=507467) が役立ちます。このツールを使用すると、アセンブリを分析して、プログラムが .NET 実装全体でどの程度柔軟な構造になっているかについて詳細なレポートを生成することができます。 Portability Analyzer は、Visual Studio 拡張機能のコンソール アプリとして提供されます。
+
+## 新しいターゲット
+
+* [.NET Core](../../core/index.md): モジュール型の設計で、side-by-side を採用しており、クロスプラットフォームのシナリオを対象としています。 side-by-side 機能により、他のアプリに影響を与えることなく新しい .NET Core バージョンを導入することができます。
+* [ASP.NET Core](/aspnet/core): .NET Core 上に構築された最新の Web フレームワークであり、開発者に .NET Core と同じメリットを提供します。
+* [ユニバーサル Windows プラットフォーム](https://blogs.msdn.microsoft.com/dotnet/2014/04/24/net-native-performance): .NET Native の静的コンパイルを使用することで、x64 および ARM マシンで動作する Windows ストア アプリのパフォーマンスが向上します。
+* .NET Core + プラットフォーム拡張機能: .NET Core API と、WCF、ASP.NET Core、FSharp、Azure などの .NET エコシステム内のその他の API が含まれます。
+* .NET Standard + プラットフォーム拡張機能: .NET Standard API と、WCF、ASP.NET Core、FSharp、および Azure などの .NET エコシステム内のその他の API が含まれます。
+
+## Portability Analyzer の使用方法
+
+.NET Portability Analyzer を使用するには、[Visual Studio ギャラリー](http://go.microsoft.com/fwlink/?LinkID=507467)から拡張機能をダウンロードし、インストールする必要があります。 これは、Visual Studio 2015 と Visual Studio 2017 で機能します。 **[分析]**、 > **[Portability Analyzer Settings (Portability Analyzer の設定)]** の順に選択して構成し、ターゲット プラットフォームを選択できます。
+
+
+
+プロジェクト全体を分析するには、**ソリューション エクスプローラー**でプロジェクトを右クリックし、**[Analyze Assembly Portability]** (アセンブリの移植性を分析) を選択します。 または、**[分析]** メニューで **[Analyze Assembly Portability]** (アセンブリの移植性を分析) を選択します。 そこから、プロジェクトの実行可能ファイルまたは DLL を選択します。
+
+
+
+分析を実行すると、.NET 移植性レポートが表示されます。 ターゲット プラットフォームでサポートされていない型のみが一覧に表示され、**[エラー一覧]** の **[メッセージ]** タブで、推奨事項を確認できます。 また、**[メッセージ]** タブから問題のある領域に直接移動することもできます。
+
+
+
+Visual Studio を使用しない場合は、 コマンド プロンプトから Portability Analyzer を使用することもできます。 [API Portability Analyzer](http://www.microsoft.com/download/details.aspx?id=42678) をダウンロードします。
+
+* 現在のディレクトリを分析するには、次のコマンドを入力します。`\...\ApiPort.exe analyze -f .`
+* 特定の .dll ファイルの一覧を分析するには、次のコマンドを入力します。`\...\ApiPort.exe analyze -f first.dll -f second.dll -f third.dll`
+
+.NET 移植性レポートは、Excel ファイル (*.xlsx*) として現在のディレクトリに保存されます。 Excel のブックの **[詳細]** タブに詳細情報が記載されています。
+
+.NET Portability Analyzer の詳細については、[GitHub ドキュメント](https://github.com/Microsoft/dotnet-apiport#documentation)にアクセスし、Channel 9 動画の「[A Brief Look at the .NET Portability Analyzer](https://channel9.msdn.com/Blogs/Seth-Juarez/A-Brief-Look-at-the-NET-Portability-Analyzer)」 (.NET Portability Analyzer の概要) をご覧ください。
diff --git a/docs/standard/assembly-format.md b/docs/standard/assembly-format.md
index 19d428b04f9..e34667274b8 100644
--- a/docs/standard/assembly-format.md
+++ b/docs/standard/assembly-format.md
@@ -10,11 +10,14 @@ ms.prod: .net
ms.technology: dotnet-standard
ms.devlang: dotnet
ms.assetid: 6520323e-ff28-4c8a-ba80-e64a413199e6
-ms.openlocfilehash: 797bd4a7c160feda69a3190d9e364b166a51c703
-ms.sourcegitcommit: bd1ef61f4bb794b25383d3d72e71041a5ced172e
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: cdd76558852992a5c2f6b7def83e30fb004f93b6
+ms.sourcegitcommit: 2142a4732bb4ff519b9817db4c24a237b9810d4b
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 10/18/2017
+ms.lasthandoff: 01/05/2018
---
# .NET アセンブリ ファイルの形式
diff --git a/docs/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm.md b/docs/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm.md
index 36df2edd1ad..e8c917a1352 100644
--- a/docs/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm.md
+++ b/docs/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm.md
@@ -17,42 +17,45 @@ helpviewer_keywords:
- stopping asynchronous operations
- asynchronous programming, beginning operations
ms.assetid: c9b3501e-6bc6-40f9-8efd-4b6d9e39ccf0
-caps.latest.revision: "13"
+caps.latest.revision:
author: rpetrusha
ms.author: ronpet
manager: wpickett
-ms.openlocfilehash: b31383f8972ecf345366f90460d88b6be21eab99
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 66553d18d46d94fb0febfff8460ac7764e9b62bb
+ms.sourcegitcommit: e7f04439d78909229506b56935a1105a4149ff3d
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 12/23/2017
---
# 非同期プログラミング モデル (APM)
- デザイン パターンを使用する非同期操作は **Begin** *OperationName* と **End** *OperationName* という名前の、各 *OperationName* 非同期操作を開始および終了する 2 種類のメソッドとして実装されます。 たとえば、 クラスは、 および メソッドを提供して、非同期的にファイルからバイトを読み取ります。 これらのメソッドは非同期バージョンの メソッドを実装します。
+ デザイン パターンを使用する非同期操作は **Begin***OperationName* と **End***OperationName* という名前の、各 *OperationName* 非同期操作を開始および終了する 2 種類のメソッドとして実装されます。 たとえば、 クラスは、 および メソッドを提供して、非同期的にファイルからバイトを読み取ります。 これらのメソッドは非同期バージョンの メソッドを実装します。
> [!NOTE]
> .NET Framework 4 以降では、タスク並列ライブラリによって非同期/並列プログラミングの新しいモデルが提供されます。 詳細については、「 [Task Parallel Library (TPL)](../../../docs/standard/parallel-programming/task-parallel-library-tpl.md) 」および「 [Task-based Asynchronous Pattern (TAP)](../../../docs/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap.md)」を参照してください。
- **Begin** *OperationName*を呼び出した後、アプリケーションは別のスレッドで非同期操作が行われている間も、スレッドの呼び出しに関する命令の実行を続行できます。 **Begin** *OperationName*の呼び出しごとに、アプリケーションでは **End** *OperationName* も呼び出して、操作の結果を取得する必要があります。
+ **Begin***OperationName* を呼び出した後、アプリケーションは別のスレッドで非同期操作が行われている間も、スレッドの呼び出しに関する命令の実行を続行できます。 **Begin***OperationName* の呼び出しごとに、アプリケーションでは **End***OperationName* も呼び出して、操作の結果を取得する必要があります。
## 非同期操作の開始
- **Begin** *OperationName* メソッドは非同期操作 *OperationName* を開始し、 インターフェイスを実装するオブジェクトを返します。 オブジェクトは非同期操作に関する情報を格納します。 非同期操作に関する情報を次の表に示します。
+ **Begin***OperationName* メソッドは非同期操作 *OperationName* を開始し、 インターフェイスを実装するオブジェクトを返します。 オブジェクトは非同期操作に関する情報を格納します。 非同期操作に関する情報を次の表に示します。
|メンバー|説明|
|------------|-----------------|
||非同期操作についての情報を格納するオプションのアプリケーション固有オブジェクト。|
|| 。非同期操作が完了するまでアプリケーションの実行をブロックするために使用できます。|
-||非同期操作が別の **スレッドで完了する代わりに、** *Begin* OperationName の呼び出しに使用されたスレッドで完了したかどうかを示す値。|
+||非同期操作が別の スレッドで完了する代わりに、**Begin***OperationName* の呼び出しに使用されたスレッドで完了したかどうかを示す値。|
||非同期操作が完了したかどうかを示す値。|
- **Begin** *OperationName* メソッドは、同期バージョンのメソッドのシグネチャで宣言された、値渡しまたは参照渡しのパラメーターを受け取ります。 どの out パラメーターも、 **Begin** *OperationName* メソッド シグネチャの一部ではありません。 **Begin** *OperationName* メソッド シグネチャには、2 種類の追加のパラメーターが含まれます。 1 つ目のパラメーターは、非同期操作が完了したときに呼び出されるメソッドを参照する デリゲートを定義します。 操作完了時にメソッドを呼び出さない場合、呼び出し元は `null` (Visual Basic では`Nothing` ) を指定できます。 2 つ目の追加のパラメーターは、ユーザー定義オブジェクトです。 このオブジェクトは、アプリケーション固有の状態情報を、非同期操作が完了したときに呼び出されるメソッドに渡すために使用できます。 **Begin** *OperationName* メソッドが、ファイルから読み取ったバイトを格納するバイト配列など操作固有の追加のパラメーターを受け取る場合は、 とアプリケーション状態オブジェクトが **Begin** *OperationName* メソッド シグネチャの最後のパラメーターになります。
+ **Begin***OperationName* メソッドは、同期バージョンのメソッドのシグネチャで宣言された、値渡しまたは参照渡しのパラメーターを受け取ります。 どの out パラメーターも、**Begin***OperationName* メソッド シグネチャの一部ではありません。 **Begin***OperationName* メソッド シグネチャには、2 種類の追加のパラメーターが含まれます。 1 つ目のパラメーターは、非同期操作が完了したときに呼び出されるメソッドを参照する デリゲートを定義します。 操作完了時にメソッドを呼び出さない場合、呼び出し元は `null` (Visual Basic では`Nothing` ) を指定できます。 2 つ目の追加のパラメーターは、ユーザー定義オブジェクトです。 このオブジェクトは、アプリケーション固有の状態情報を、非同期操作が完了したときに呼び出されるメソッドに渡すために使用できます。 **Begin***OperationName* メソッドが、ファイルから読み取ったバイトを格納するバイト配列など操作固有の追加のパラメーターを受け取る場合は、 とアプリケーション状態オブジェクトが **Begin***OperationName* メソッド シグネチャの最後のパラメーターになります。
- **Begin** *OperationName* は、瞬時にコントロールを呼び出し元スレッドに返します。 **Begin** *OperationName* メソッドが例外をスローする場合は、非同期操作が開始される前に例外がスローされます。 **Begin** *OperationName* メソッドが例外をスローする場合、コールバック メソッドは呼び出されません。
+ **Begin***OperationName* は、瞬時にコントロールを呼び出し元スレッドに返します。 **Begin***OperationName* メソッドが例外をスローする場合は、非同期操作が開始される前に例外がスローされます。 **Begin***OperationName* メソッドが例外をスローする場合、コールバック メソッドは呼び出されません。
## 非同期操作の終了
- **End** *OperationName* メソッドは、非同期操作の *OperationName*を終了します。 **End** *OperationName* メソッドの戻り値は、このメソッドの対応する同期操作によって返される型と同じ型であり、非同期操作に固有です。 たとえば、 メソッドは から読み取ったバイト数を返し、 メソッドはホスト コンピューターに関する情報を含む オブジェクトを返します。 **End** *OperationName* メソッドは、メソッドの同期バージョンのシグネチャで宣言された out パラメーターや ref パラメーターをすべて受け取ります。 **End** *OperationName* メソッドには、同期メソッドからのパラメーターに加えて パラメーターが含まれています。 呼び出し元は、対応する呼び出しから返されたインスタンスを **Begin** *OperationName*に渡す必要があります。
+ **End***OperationName* メソッドは、非同期操作の *OperationName* を終了します。 **End***OperationName* メソッドの戻り値は、このメソッドの対応する同期操作によって返される型と同じ型であり、非同期操作に固有です。 たとえば、 メソッドは から読み取ったバイト数を返し、 メソッドはホスト コンピューターに関する情報を含む オブジェクトを返します。 **End***OperationName* メソッドは、メソッドの同期バージョンのシグネチャで宣言された out パラメーターや ref パラメーターをすべて受け取ります。 **End***OperationName* メソッドには、同期メソッドからのパラメーターに加えて パラメーターが含まれています。 呼び出し元は、対応する呼び出しから返されたインスタンスを **Begin***OperationName* に渡す必要があります。
- End **OperationName** *が呼び出されるときに* オブジェクトによって表される非同期操作が完了していない場合、 **End** *OperationName* は非同期操作が完了するまで、呼び出し元スレッドをブロックします。 非同期操作によってスローされた例外は、 **End** *OperationName* メソッドからスローされます。 同じ **を使用して** *End* OperationName メソッドを複数回呼び出す場合の効果は定義されません。 同様に、関連する Begin メソッドによって返されたのではない **を使用した** *End* OperationName メソッドの呼び出しも定義されません。
+ **End***OperationName* が呼び出されるときに オブジェクトによって表される非同期操作が完了していない場合、**End***OperationName* は非同期操作が完了するまで、呼び出し元スレッドをブロックします。 非同期操作によってスローされた例外は、**End***OperationName* メソッドからスローされます。 同じ を使用して **End***OperationName* メソッドを複数回呼び出す場合の効果は定義されません。 同様に、関連する Begin メソッドによって返されたのではない を使用した **End***OperationName* メソッドの呼び出しも定義されません。
> [!NOTE]
> どちらの未定義シナリオの場合でも、実装者は のスローを検討する必要があります。
@@ -62,17 +65,17 @@ ms.lasthandoff: 11/21/2017
アプリケーション開発者には、非同期操作の結果にアクセスするための、デザイン上の選択肢がいくつかあります。 どの選択が適切になるかは、アプリケーションが操作の完了前に実行できる命令を持っているかどうかによって変わります。 非同期操作の結果を受け取るまで、アプリケーションが別の作業を実行できない場合は、結果が使用可能になるまで、そのアプリケーションをブロックする必要があります。 非同期操作が完了するまでブロックするには、次に示す方法の 1 つを使用します。
-- アプリケーションのメイン スレッドから **End** *OperationName* を呼び出し、操作が完了するまでアプリケーションの実行をブロックします。 この手法の例については、次を参照してください。 [、非同期操作を終了してアプリケーションの実行をブロックして](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)です。
+- アプリケーションのメイン スレッドから **End***OperationName* を呼び出し、操作が完了するまでアプリケーションの実行をブロックします。 この手法の例については、「[非同期操作の終了によるアプリケーション実行のブロック](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)」を参照してください。
- を使用して、1 つ以上の操作が完了するまでアプリケーションの実行をブロックします。 この手法の例については、「 [Blocking Application Execution Using an AsyncWaitHandle](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md)」を参照してください。
非同期操作が完了するまでアプリケーションをブロックする必要がない場合は、次のいずれかの方法を使用します。
-- プロパティを定期的に確認し、操作が完了したときに **End** *OperationName* を呼び出して、操作完了ステータスをポーリングします。 この手法の例については、「 [Polling for the Status of an Asynchronous Operation](../../../docs/standard/asynchronous-programming-patterns/polling-for-the-status-of-an-asynchronous-operation.md)」を参照してください。
+- プロパティを定期的に確認し、操作が完了したときに **End***OperationName* を呼び出して、操作完了ステータスをポーリングします。 この手法の例については、「 [Polling for the Status of an Asynchronous Operation](../../../docs/standard/asynchronous-programming-patterns/polling-for-the-status-of-an-asynchronous-operation.md)」を参照してください。
- デリゲートを使用して、操作が完了したときに呼び出されるメソッドを指定します。 この手法の例については、「 [Using an AsyncCallback Delegate to End an Asynchronous Operation](../../../docs/standard/asynchronous-programming-patterns/using-an-asynccallback-delegate-to-end-an-asynchronous-operation.md)」を参照してください。
-## 関連項目
+## 参照
[イベント ベースの非同期パターン (EAP)](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md)
[同期メソッドの非同期呼び出し](../../../docs/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously.md)
[AsyncCallback デリゲートおよび状態オブジェクトの使用](../../../docs/standard/asynchronous-programming-patterns/using-an-asynccallback-delegate-and-state-object.md)
diff --git a/docs/standard/asynchronous-programming-patterns/best-practices-for-implementing-the-event-based-asynchronous-pattern.md b/docs/standard/asynchronous-programming-patterns/best-practices-for-implementing-the-event-based-asynchronous-pattern.md
index 85cc15f1f95..23049f22694 100644
--- a/docs/standard/asynchronous-programming-patterns/best-practices-for-implementing-the-event-based-asynchronous-pattern.md
+++ b/docs/standard/asynchronous-programming-patterns/best-practices-for-implementing-the-event-based-asynchronous-pattern.md
@@ -18,15 +18,18 @@ helpviewer_keywords:
- AsyncOperation class
- AsyncCompletedEventArgs class
ms.assetid: 4acd2094-4f46-4eff-9190-92d0d9ff47db
-caps.latest.revision: "8"
+caps.latest.revision:
author: dotnet-bot
ms.author: dotnetcontent
manager: wpickett
-ms.openlocfilehash: b6a98c6854bc935eb8b319bd8a26dba8f12380ae
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 910edb8c79518f63e8b881b8eaecd69060fb6711
+ms.sourcegitcommit: 957c696f25e39f923a827fc3ad5e8ab72768838c
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 01/13/2018
---
# イベントベースの非同期パターンを実装するための推奨される手順
イベントベースの非同期パターンは、使い慣れたイベントおよびデリゲートのセマンティクスと共に、クラス内の非同期動作を公開する効果的な方法を提供します。 イベント ベースの非同期パターンを実装するには、いくつかの固有の動作要件に従う必要があります。 以降のセクションでは、イベントベースの非同期パターンに従うクラスを実装する際に検討すべき要件とガイドラインについて説明します。
@@ -37,14 +40,14 @@ ms.lasthandoff: 11/21/2017
イベントベースの非同期パターンを実装する場合は、クラスが適切に動作し、クラスのクライアントがそのような動作に依存できるようにするため、多数の保証を提供する必要があります。
### 完了
- 正常完了、エラー、またはキャンセルの場合に常に *MethodName*`Completed` イベント ハンドラーを呼び出します。 アプリケーションがアイドルになり完了しない状態が発生してはなりません。 この規則の唯一の例外として、非同期操作自体は完了することがないように設計されている場合があります。
+ 正常完了、エラー、またはキャンセルの場合に常に *MethodName***Completed** イベント ハンドラーを呼び出します。 アプリケーションがアイドルになり完了しない状態が発生してはなりません。 この規則の唯一の例外として、非同期操作自体は完了することがないように設計されている場合があります。
### 完了イベントおよび EventArg
- 個別の *MethodName*`Async` メソッドごとに、次の設計要件を適用します。
+ 個別の *MethodName***Async** メソッドごとに、次の設計要件を適用します。
-- メソッドと同じクラスで *MethodName*`Completed` イベントを定義します。
+- メソッドと同じクラスで *MethodName***Completed** イベントを定義します。
-- クラスから派生した *MethodName*`Completed` イベントの クラスと、これに付随するデリゲートを定義します。 既定のクラス名の形式は *MethodName*`CompletedEventArgs` です。
+- クラスから派生した *MethodName***Completed** イベントの クラスと、これに付随するデリゲートを定義します。 既定のクラス名の形式は、*MethodName***CompletedEventArgs** です。
- クラスは、*MethodName* メソッドの戻り値に固有のクラスにしてください。 クラスを使用する場合は、開発者に対して結果をキャストすることを義務付けないでください。
@@ -66,31 +69,31 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
- を返すメソッドのために `void` クラスを定義しないでください。 代わりに クラスのインスタンスを使用してください。
-- 常に *MethodName*`Completed` イベントを発生させてください。 このイベントは、正常完了、エラー、またはキャンセル時に発生する必要があります。 アプリケーションがアイドルになり完了しない状態が発生してはなりません。
+- 常に *MethodName***Completed** イベントを発生させてください。 このイベントは、正常完了、エラー、またはキャンセル時に発生する必要があります。 アプリケーションがアイドルになり完了しない状態が発生してはなりません。
- 非同期操作で発生した例外をすべてキャッチし、キャッチした例外を プロパティに割り当ててください。
- タスクの実行中にエラーが発生した場合は、結果にアクセスできないようにしてください。 プロパティが `null` ではない場合は、 構造体のプロパティにアクセスすると例外が発生するようにしてください。 この検証を行うには、 メソッドを使用します。
-- タイムアウトをエラーとしてモデル化します。 タイムアウトが発生したら、*MethodName*`Completed` イベントを発生させ、 を プロパティに割り当てます。
+- タイムアウトをエラーとしてモデル化します。 タイムアウトが発生したら、*MethodName***Completed** イベントを発生させ、 を プロパティに割り当てます。
-- クラスで複数の同時呼び出しがサポートされている場合は、*MethodName*`Completed` イベントに適切な `userSuppliedState` オブジェクトが含まれるようにしてください。
+- クラスで複数の同時呼び出しがサポートされている場合は、*MethodName***Completed** イベントに適切な `userSuppliedState` オブジェクトが含まれるようにしてください。
-- *MethodName*`Completed` イベントが、適切なスレッドでアプリケーション サイクルの適切な時点で発生するようにしてください。 詳細については、「スレッド処理およびコンテキスト」を参照してください。
+- *MethodName***Completed** イベントが、適切なスレッドでアプリケーション サイクルの適切な時点で発生するようにしてください。 詳細については、「スレッド処理およびコンテキスト」を参照してください。
### 操作の同時実行
-- クラスで複数の同時呼び出しがサポートされている場合は、開発者が各呼び出しを個別に追跡できるようにするため、オブジェクト値状態パラメーターまたはタスク ID `userSuppliedState` を受け取る *MethodName*`Async` オーバーライドを定義します。 このパラメーターは常に *MethodName*`Async` メソッドのシグネチャの最終パラメーターにする必要があります。
+- クラスで複数の同時呼び出しがサポートされている場合は、開発者が各呼び出しを個別に追跡できるようにするため、オブジェクト値状態パラメーターまたはタスク ID `userSuppliedState` を受け取る *MethodName***Async** オーバーライドを定義します。 このパラメーターは、常に *MethodName***Async** メソッドのシグネチャの最終パラメーターにする必要があります。
-- オブジェクト値状態パラメーターまたはタスク ID を受け取る *MethodName*`Async` オーバーロードがクラスによって定義される場合は、そのタスク ID の操作の有効期間を追跡し、完了ハンドラーに戻す必要があります。 役に立つヘルパー クラスがあります。 同時実行管理の詳細については、「[チュートリアル: イベント ベースの非同期パターンをサポートするコンポーネントを実装する](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)」を参照してください。
+- オブジェクト値状態パラメーターまたはタスク ID を受け取る *MethodName***Async** オーバーロードがクラスによって定義される場合は、そのタスク ID の操作の有効期間を追跡し、完了ハンドラーに戻す必要があります。 役に立つヘルパー クラスがあります。 同時実行管理の詳細については、「[チュートリアル: イベント ベースの非同期パターンをサポートするコンポーネントを実装する](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)」を参照してください。
-- クラスによって、状態パラメーターなしで *MethodName*`Async` メソッドが定義され、このクラスで複数の同時呼び出しがサポートされていない場合、直前の *MethodName*`Async` 呼び出しが完了する前に *MethodName*`Async` を呼び出そうとすると、 が発生するようにします。
+- クラスによって、状態パラメーターなしで *MethodName***Async** メソッドが定義され、このクラスで複数の同時呼び出しがサポートされていない場合、直前の *MethodName***Async** 呼び出しが完了する前に *MethodName***Async** を呼び出そうとすると、 が発生するようにします。
-- 一般に、`userSuppliedState` パラメーターのない *MethodName*`Async` メソッドを複数回呼び出すときには、複数の未完了操作が存在するようにするため、例外を発生させないでください。 例外を発生させることができるのは、クラスがその状況に対処できないことが明らかであるものの、開発者がこのような区別できない複数のコールバックを処理できる場合です。
+- 一般に、`userSuppliedState` パラメーターのない *MethodName***Async** メソッドを複数回呼び出すときには、複数の未完了操作が存在するようにするため、例外を発生させないでください。 例外を発生させることができるのは、クラスがその状況に対処できないことが明らかであるものの、開発者がこのような区別できない複数のコールバックを処理できる場合です。
### 結果へのアクセス
-- 非同期操作の実行中にエラーが発生した場合、その結果にはアクセスできないようにしてください。 が ではない場合に `null` のプロパティにアクセスすると、 により参照される例外が発生するようにしてください。. クラスには、この目的で使用する メソッドが用意されています。
+- 非同期操作の実行中にエラーが発生した場合、その結果にはアクセスできないようにしてください。 が ではない場合に `null` のプロパティにアクセスすると、 により参照される例外が発生するようにしてください。 クラスには、この目的で使用する メソッドが用意されています。
- 結果にアクセスしようとすると、操作がキャンセルされたことを示す が発生するようにしてください。 この検証を行うには、 メソッドを使用します。
@@ -98,7 +101,7 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
- 可能であれば、進行状況レポートをサポートします。 これにより、開発者はクラスを使用する際に、より優れたアプリケーション ユーザー エクスペリエンスを提供できます。
-- `ProgressChanged`/*MethodName*`ProgressChanged` イベントを実装する場合は、操作の *MethodName*`Completed` イベントが発生した後で、特定の非同期操作についてそのようなイベントが発生していないようにしてください。
+- **ProgressChanged** または *MethodName***ProgressChanged** イベントを実装する場合は、操作の *MethodName***Completed** イベントが発生した後で、特定の非同期操作についてそのようなイベントが発生していないようにしてください。
- 標準 の値が設定される場合は、 が常にパーセンテージとして解釈できるようにしてください。 パーセンテージは正確である必要はありませんが、パーセンテージを表している必要があります。 進行状況レポート メトリックがパーセンテージ以外でなければならない場合は、 クラスからクラスを派生し、 は 0 のままにしておきます。 パーセンテージ以外のレポート メトリックは使用しないでください。
@@ -108,7 +111,7 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
- クラスが複数の同時呼び出しをサポートしている場合は、`IsBusy` プロパティを公開しないでください。 たとえば XML Web サービス プロキシは、非同期メソッドの複数同時呼び出しをサポートしているため、`IsBusy` プロパティを公開しません。
-- `IsBusy` プロパティは、*MethodName*`Async` メソッドが呼び出されてから、*MethodName*`Completed` イベントが発生するまでの間は、`true` を返します。 それ以外の場合は、`false` を返す必要があります。 プロパティを公開するクラスの例として、 および `IsBusy` コンポーネントがあります。
+- `IsBusy` プロパティは、*MethodName***Async** メソッドが呼び出されてから、*MethodName***Completed** イベントが発生するまでの間は、`true` を返します。 それ以外の場合は、`false` を返す必要があります。 プロパティを公開するクラスの例として、 および `IsBusy` コンポーネントがあります。
### キャンセル
@@ -120,7 +123,7 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
- キャンセル メソッドの呼び出しは常に正常に戻り、例外を発生させないようにしてください。 一般に、特定の時点で操作が実際にキャンセル可能かどうかと、前に発行したキャンセルが正常に実行されたかどうかはクライアントに通知されません。 ただし、キャンセルが正常に完了すると常にアプリケーションに通知が送られます。これは、アプリケーションが完了ステータスに関与しているためです。
-- 操作がキャンセルされた場合は *MethodName*`Completed` イベントを発生させます。
+- 操作がキャンセルされた場合は、*MethodName***Completed** イベントを発生させます。
### エラーおよび例外
@@ -129,14 +132,14 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
### スレッド処理およびコンテキスト
クラスを正しく操作するには、特定のアプリケーション モデル ([!INCLUDE[vstecasp](../../../includes/vstecasp-md.md)] および Windows Forms アプリケーションを含む) の適切なスレッドまたはコンテキストで、クライアントのイベント ハンドラーが呼び出されることが重要です。 非同期クラスがどのアプリケーション モデルでも正しく動作するように、 と という 2 つの重要なヘルパー クラスが用意されています。
- にはメソッド が含まれています。このメソッドは を返します。 *MethodName*`Async` メソッドは を呼び出し、クラスは返される を使用して非同期タスクの有効期間を追跡します。
+ にはメソッド が含まれています。このメソッドは を返します。 *MethodName***Async** メソッドは を呼び出し、クラスは返される を使用して非同期タスクの有効期間を追跡します。
進行状況、インクリメンタル結果、および完了をクライアントに報告するため、 で メソッドと メソッドを呼び出します。 は、クライアントのイベント ハンドラーに対する呼び出しを適切なスレッドまたはコンテキストにマーシャリングします。
> [!NOTE]
> アプリケーション モデルのポリシーに対し明示的に準拠しないものの、イベント ベースの非同期パターンを使用する他のメリットを利用したい場合は、これらの規則を回避できます。 たとえば、Windows Forms でのクラス操作をフリー スレッド化するとします。 開発者がフリー スレッド化クラスの暗黙的な制限を理解している場合は、フリースレッド化クラスを作成できます。 コンソール アプリケーションは 呼び出しの実行を同期しません。 これが原因で、`ProgressChanged` イベントが正しくない順序で発生することがあります。 呼び出しを順次実行するには、 クラスを実装およびインストールします。
- 使用しての詳細についてはとするには、非同期操作を有効にするには、「[チュートリアル: イベント ベースの非同期パターンをサポートするコンポーネントを実装する](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)です。
+ と を使用した非同期操作の詳細については、「[チュートリアル: イベントベースの非同期パターンをサポートするコンポーネントの実装](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)」を参照してください。
## ガイドライン
@@ -152,7 +155,7 @@ private void Form1_MethodNameCompleted(object sender, MethodNameCompletedEventAr
- どのようなマルチスレッドを使用する場合でも、深刻かつ複雑なバグが発生する可能性があります。 マルチスレッドを使用するソリューションを実装する前に、「[マネージ スレッド処理の実施](../../../docs/standard/threading/managed-threading-best-practices.md)」を参照してください。
-## 関連項目
+## 参照
diff --git a/docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md b/docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md
index d7a4c8d065e..cf23ccb8a06 100644
--- a/docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md
+++ b/docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md
@@ -14,34 +14,37 @@ helpviewer_keywords:
- asynchronous programming, blocking applications
- blocking application execution
ms.assetid: cc5e2834-a65b-4df8-b750-7bdb79997fee
-caps.latest.revision: "8"
+caps.latest.revision:
author: rpetrusha
ms.author: ronpet
manager: wpickett
dev_langs:
- csharp
- vb
-ms.openlocfilehash: ccca6e1e4f6b5cdf098018b59426fb2262e2b346
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 3ec7bfe6fe2cef20a6d74030802113a47e8679e1
+ms.sourcegitcommit: 957c696f25e39f923a827fc3ad5e8ab72768838c
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 01/13/2018
---
# 非同期操作の終了によるアプリケーション実行のブロック
-非同期操作の結果の待機中に他の作業を続行できませんできるアプリケーションは、操作が完了するまでブロックする必要があります。 非同期操作の完了を待機中に、アプリケーションのメイン スレッドをブロックするのにには、次のオプションのいずれかを使用します。
+非同期操作の結果の待機中に、他の作業を継続できないアプリケーションは、操作が完了するまでブロックする必要があります。 次のオプションのいずれかを使用して、非同期操作が完了するまでの待機中に、アプリケーションのメイン スレッドをブロックします。
-- 非同期操作を呼び出す**終了** *OperationName*メソッドです。 この方法は、このトピックで示されています。
+- 非同期操作の **End***OperationName* メソッドを呼び出します。 このトピックでは、この方法のデモが実行されます。
-- 使用して、のプロパティ、 、非同期操作によって返される**開始** *OperationName*メソッドです。 この方法は、次を参照してください。[ブロックの実行を使用してアプリケーション AsyncWaitHandle](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md)です。
+- 非同期操作の **Begin***OperationName* メソッドによって返される の プロパティを使用します。 この方法をデモの例については、「[AsyncWaitHandle の使用によるアプリケーション実行のブロック](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md)」を参照してください。
- 使用するアプリケーション、**終了** *OperationName*非同期操作が完了するまでブロックするメソッドの呼び出しは通常、**開始** *OperationName*メソッド、何も処理を操作の結果なしで実行できますし、**終了** *OperationName*です。
+ 非同期操作が完了するまでブロックするために **End***OperationName* を使用するアプリケーションは、通常は **Begin***OperationName* メソッドを呼び出し、操作の結果なしで実行できる任意の作業を実行して、**End***OperationName* を呼び出します。
## 例
- 次のコード例では、非同期のメソッドの使用方法を示します、ユーザー指定のコンピューターのドメイン ネーム システム情報を取得するクラス。 注意してください`null`(`Nothing` Visual Basic で) 渡される、 `requestCallback`と`stateObject`パラメーターのため、これらの引数は、このアプローチを使用する場合は必要ありません。
+ 次のコード例は、ユーザー指定のコンピューターのドメイン ネーム システム情報を取得するために、 クラスの非同期メソッドを使用してデモを実行します。 この方法を使用する場合はこれらの引数は必要ないため、`null` (Visual Basic の場合は `Nothing`) は、`requestCallback` と `stateObject` パラメーターに渡されることに注意してください。
[!code-csharp[AsyncDesignPattern#1](../../../samples/snippets/csharp/VS_Snippets_CLR/AsyncDesignPattern/CS/Async_EndBlock.cs#1)]
[!code-vb[AsyncDesignPattern#1](../../../samples/snippets/visualbasic/VS_Snippets_CLR/AsyncDesignPattern/VB/Async_EndBlock.vb#1)]
-## 関連項目
+## 参照
[イベント ベースの非同期パターン (EAP)](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md)
[イベントベースの非同期パターンの概要](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-overview.md)
diff --git a/docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md b/docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md
index d0f4ac8a3e4..db52cbade68 100644
--- a/docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md
+++ b/docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md
@@ -19,31 +19,34 @@ helpviewer_keywords:
- stopping asynchronous operations
- blocking application execution
ms.assetid: 3e32daf2-8161-4e8f-addd-9fd9ff101b03
-caps.latest.revision: "6"
+caps.latest.revision:
author: rpetrusha
ms.author: ronpet
manager: wpickett
-ms.openlocfilehash: 2660b3cbf7e8ee43a22edbfb66a4262684983b87
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 380080c0aa05bc5b94c9ec5fe471f2f255562cd2
+ms.sourcegitcommit: 957c696f25e39f923a827fc3ad5e8ab72768838c
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 01/13/2018
---
# AsyncWaitHandle の使用によるアプリケーション実行のブロック
-非同期操作の結果の待機中に他の作業を続行できませんできるアプリケーションは、操作が完了するまでブロックする必要があります。 非同期操作の完了を待機中に、アプリケーションのメイン スレッドをブロックするのにには、次のオプションのいずれかを使用します。
+非同期操作の結果の待機中に、他の作業を継続できないアプリケーションは、操作が完了するまでブロックする必要があります。 次のオプションのいずれかを使用して、非同期操作が完了するまでの待機中に、アプリケーションのメイン スレッドをブロックします。
-- 使用して、のプロパティ、 、非同期操作によって返される**開始** *OperationName*メソッドです。 この方法は、このトピックで示されています。
+- 非同期操作の **Begin***OperationName* メソッドによって返される の プロパティを使用します。 このトピックでは、この方法のデモが実行されます。
-- 非同期操作の呼び出し**終了** *OperationName*メソッドです。 この方法は、次を参照してください。 [、非同期操作を終了してアプリケーションの実行をブロックして](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)です。
+- 非同期操作の **End***OperationName* メソッドを呼び出します。 この方法をデモの例については、「[非同期操作の終了によるアプリケーション実行のブロック](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)」を参照してください。
- 1 つまたは複数を使用するアプリケーション非同期操作が完了するまでブロックするオブジェクトを呼び出す通常、**開始** *OperationName*メソッド、何も処理を実行します。操作と、非同期処理されるまでブロックの結果なし次のコマンドを完了します。 1 回の操作でのいずれかを呼び出すことによってアプリケーションをブロックすることができます、メソッドを使用して、です。 一連の非同期操作の完了を待っている間にブロックは、格納、関連付けられているオブジェクト配列の最初の呼び出しで、メソッドです。 いずれかの一連の非同期操作が完了するを待っている間にブロックは、格納、関連付けられているオブジェクト配列の最初の呼び出しで、メソッドです。
+ 非同期操作が完了するまでブロックする 1 つ以上の を使用するアプリケーションは、通常は **Begin***OperationName* メソッドを呼び出し、操作の結果なしで実行できる任意の作業を実行し、非同期操作が完了するまでブロックします。 アプリケーションは、 を使用して メソッドのいずれかを呼び出し、単一の操作上でブロックできます。 非同期操作のセットが完了するまで待機しながらブロックするには、関連する オブジェクトを配列に格納し、 メソッドのいずれかを呼び出します。 非同期操作のいずれかのセットが完了するまで待機しながらブロックするには、関連する オブジェクトを配列に格納し、 メソッドのいずれかを呼び出します。
## 例
- 次のコード例では、ユーザー指定のコンピューターのドメイン ネーム システム情報を取得する DNS クラスで非同期メソッドの使用を示します。 例では、ブロックを使用して、非同期操作に関連付けられています。 なお`null`(`Nothing` Visual Basic で) が渡されました、 `requestCallback`と`stateObject`パラメーターこのアプローチを使用するときに、必要なこれらがないためです。
+ 次のコード例は、ユーザー指定のコンピューターのドメイン ネーム システム情報を取得するために、DNS クラスの非同期メソッドを使用してデモを実行します。 例では、非同期操作に関連付けられた を使用して、ブロックのデモを実行します。 この方法を使用する場合は必要ないため、`null` (Visual Basic の場合は `Nothing`) は、`requestCallback` と `stateObject` パラメーターに渡されることに注意してください。
[!code-csharp[AsyncDesignPattern#2](../../../samples/snippets/csharp/VS_Snippets_CLR/AsyncDesignPattern/CS/Async_EndBlockWait.cs#2)]
[!code-vb[AsyncDesignPattern#2](../../../samples/snippets/visualbasic/VS_Snippets_CLR/AsyncDesignPattern/VB/Async_EndBlockWait.vb#2)]
-## 関連項目
+## 参照
[イベント ベースの非同期パターン (EAP)](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md)
[イベントベースの非同期パターンの概要](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-overview.md)
diff --git a/docs/standard/asynchronous-programming-patterns/calling-asynchronous-methods-using-iasyncresult.md b/docs/standard/asynchronous-programming-patterns/calling-asynchronous-methods-using-iasyncresult.md
index 0ebc85e6fe5..9f7b2972c6b 100644
--- a/docs/standard/asynchronous-programming-patterns/calling-asynchronous-methods-using-iasyncresult.md
+++ b/docs/standard/asynchronous-programming-patterns/calling-asynchronous-methods-using-iasyncresult.md
@@ -17,27 +17,30 @@ helpviewer_keywords:
- IAsyncResult interface, calling asynchronous methods
- stopping asynchronous operations
ms.assetid: 07fba116-045b-473c-a0b7-acdbeb49861f
-caps.latest.revision: "6"
+caps.latest.revision:
author: rpetrusha
ms.author: ronpet
manager: wpickett
-ms.openlocfilehash: 81c05aeae00e79f614ef1514e54765b21e7e2dde
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: ab98973fadf1893b4954fd19f679fe0ff690539d
+ms.sourcegitcommit: e7f04439d78909229506b56935a1105a4149ff3d
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 12/23/2017
---
# IAsyncResult を使用した非同期メソッドの呼び出し
-.NET Framework およびサード パーティ製のクラス ライブラリ内の型は、アプリケーションをアプリケーションのメイン スレッド以外のスレッドで非同期操作を実行中に実行を継続できるようにするメソッドを提供できます。 次のセクションでは、記述しを使用して非同期メソッドを呼び出すことができます、さまざまな方法を示すコード例を提供、デザイン パターンです。
+.NET Framework とサードパーティのさまざま種類のクラス ライブラリが提供するメソッドを利用することで、アプリケーションはメインのアプリケーション スレッド以外のスレッドで非同期操作を実行しながら実行を継続できます。 次のセクションでは、コード例を取り上げ、 設計パターンを使用する非同期メソッドをさまざまな方法で呼び出します。
-- [非同期操作を終了してアプリケーションの実行をブロックして](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)です。
+- [非同期操作の終了によるアプリケーション実行のブロック](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-by-ending-an-async-operation.md)。
-- [AsyncWaitHandle の使用、アプリケーションの実行をブロックして](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md)です。
+- [AsyncWaitHandle の使用によるアプリケーション実行のブロック](../../../docs/standard/asynchronous-programming-patterns/blocking-application-execution-using-an-asyncwaithandle.md)。
-- [非同期操作のステータスのポーリング](../../../docs/standard/asynchronous-programming-patterns/polling-for-the-status-of-an-asynchronous-operation.md)です。
+- [非同期操作のステータスのポーリング](../../../docs/standard/asynchronous-programming-patterns/polling-for-the-status-of-an-asynchronous-operation.md)。
-- [AsyncCallback デリゲートを使用して、非同期操作を終了する](../../../docs/standard/asynchronous-programming-patterns/using-an-asynccallback-delegate-to-end-an-asynchronous-operation.md)です。
+- [AsyncCallback デリゲートの使用による非同期操作の終了](../../../docs/standard/asynchronous-programming-patterns/using-an-asynccallback-delegate-to-end-an-asynchronous-operation.md)。
-## 関連項目
+## 参照
[イベント ベースの非同期パターン (EAP)](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md)
[イベントベースの非同期パターンの概要](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-overview.md)
diff --git a/docs/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously.md b/docs/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously.md
index 1dad1fb78bc..59bccf2ad6e 100644
--- a/docs/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously.md
+++ b/docs/standard/asynchronous-programming-patterns/calling-synchronous-methods-asynchronously.md
@@ -26,15 +26,18 @@ helpviewer_keywords:
- waiting for asynchronous calls
- status information [.NET Framework], asynchronous operations
ms.assetid: 41972034-92ed-450a-9664-ab93fcc6f1fb
-caps.latest.revision: "24"
+caps.latest.revision:
author: rpetrusha
ms.author: ronpet
manager: wpickett
-ms.openlocfilehash: 965e5928c03ae573eacba98a7596f55b56aaba26
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: e7e6f402d9423a8ae1ee464499f1b794785c2b06
+ms.sourcegitcommit: e7f04439d78909229506b56935a1105a4149ff3d
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 12/23/2017
---
# 同期メソッドの非同期呼び出し
.NET Framework では、すべてのメソッドを非同期的に呼び出すことができます。 これを行うには、呼び出すメソッドと同じシグネチャを持つデリゲートを定義します。これにより、共通言語ランタイムによって、適切なシグネチャを持つ、このデリゲートの `BeginInvoke` メソッドと `EndInvoke` メソッドが自動的に定義されます。
@@ -44,7 +47,7 @@ ms.lasthandoff: 11/21/2017
`BeginInvoke` メソッドは、非同期呼び出しを開始します。 このメソッドは、非同期的に実行するメソッドと同じパラメーターと共に、2 つの省略可能な追加パラメーターを持っています。 最初のパラメーターは、同期呼び出しが完了したときに呼び出されるメソッドを参照する デリゲートです。 2 番目のパラメーターは、コールバック メソッドに情報を渡すユーザー定義オブジェクトです。 `BeginInvoke` からは制御がすぐに戻り、非同期呼び出しが完了するまで待機しません。 `BeginInvoke` は を返します。これを使用して非同期呼び出しの進捗状況を監視できます。
- `EndInvoke` メソッドは、非同期呼び出しの結果を取得します。 このメソッドは、 `BeginInvoke`の後であればいつでも呼び出すことができます。 非同期呼び出しがまだ完了していない場合は、 `EndInvoke` は非同期呼び出しが完了するまで呼び出し元スレッドをブロックします。 パラメーター`EndInvoke`含める、`out`と`ref`パラメーター (`` `ByRef`と`ByRef`Visual Basic で)、非同期的に実行するメソッドの加えたによって返される`BeginInvoke`.
+ `EndInvoke` メソッドは、非同期呼び出しの結果を取得します。 このメソッドは、 `BeginInvoke`の後であればいつでも呼び出すことができます。 非同期呼び出しがまだ完了していない場合は、 `EndInvoke` は非同期呼び出しが完了するまで呼び出し元スレッドをブロックします。 `EndInvoke` のパラメーターには、非同期実行するメソッドの `out` パラメーターと `ref` パラメーター (Visual Basic では `` `ByRef` と `ByRef`) と、`BeginInvoke` によって返された が含まれます。
> [!NOTE]
> [!INCLUDE[vsprvslong](../../../includes/vsprvslong-md.md)] の IntelliSense 機能によって `BeginInvoke` および `EndInvoke`のパラメーターが表示されます。 Visual Studio や類似のツールを使っていない場合や、[!INCLUDE[vsprvslong](../../../includes/vsprvslong-md.md)] で C# を使っている場合、これらのメソッドについて定義されているパラメーターについては、「[非同期プログラミング モデル (APM)](../../../docs/standard/asynchronous-programming-patterns/asynchronous-programming-model-apm.md)」を参照してください。
@@ -57,7 +60,7 @@ ms.lasthandoff: 11/21/2017
- によって返される `BeginInvoke` をポーリングして非同期呼び出しが完了したかどうかを確認した後、 `EndInvoke`を呼び出します。
-- コールバック メソッドのデリゲートを `BeginInvoke`に渡します。 このメソッドは、非同期呼び出しが完了すると、 スレッドで実行されます。 コールバック メソッドは `EndInvoke`を呼び出します。
+- コールバック メソッドのデリゲートを `BeginInvoke` に渡します。 このメソッドは、非同期呼び出しが完了すると、 スレッドで実行されます。 コールバック メソッドは `EndInvoke` を呼び出します。
> [!IMPORTANT]
> どの手法を使用する場合でも、常に `EndInvoke` を呼び出して、非同期呼び出しを完了します。
@@ -87,7 +90,7 @@ ms.lasthandoff: 11/21/2017
を使用する場合は、非同期呼び出しの完了前または完了後、 `EndInvoke` を呼び出して結果を取得する前に、追加の処理を実行できます。
> [!NOTE]
-> `EndInvoke`を呼び出す場合、待機ハンドルは自動的に閉じられません。 待機ハンドルへのすべての参照を解放すると、ガベージ コレクションが待機ハンドルをクリアするときにシステム リソースが解放されます。 待機ハンドルの使用が終了すると同時にシステム リソースを解放するには、 メソッドを呼び出して破棄します。 破棄可能なオブジェクトが明示的に破棄されると、ガベージ コレクションはより効率的に動作します。
+> `EndInvoke` を呼び出す場合、待機ハンドルは自動的に閉じられません。 待機ハンドルへのすべての参照を解放すると、ガベージ コレクションが待機ハンドルをクリアするときにシステム リソースが解放されます。 待機ハンドルの使用が終了すると同時にシステム リソースを解放するには、 メソッドを呼び出して破棄します。 破棄可能なオブジェクトが明示的に破棄されると、ガベージ コレクションはより効率的に動作します。
[!code-cpp[AsyncDelegateExamples#3](../../../samples/snippets/cpp/VS_Snippets_CLR/AsyncDelegateExamples/cpp/waithandle.cpp#3)]
[!code-csharp[AsyncDelegateExamples#3](../../../samples/snippets/csharp/VS_Snippets_CLR/AsyncDelegateExamples/CS/waithandle.cs#3)]
@@ -107,7 +110,7 @@ ms.lasthandoff: 11/21/2017
例に関する注意事項
-- `threadId`のパラメーター`TestMethod`は、`out`パラメーター ([`` `ByRef` Visual Basic で) ため、入力値を使用することはありません、`TestMethod`です。 `BeginInvoke` 呼び出しにはダミー変数が渡されます。 `threadId` パラメーターが `ref` パラメーター (Visual Basic では`ByRef` ) であった場合、 `BeginInvoke` と `EndInvoke`の両方に渡すことができるように、変数はクラス レベルのフィールドであることが必要です。
+- `TestMethod` の `threadId` パラメーターは `out` パラメーター (Visual Basic では [`` `ByRef`) であるため、その入力値が `TestMethod` で使用されることはありません。 `BeginInvoke` 呼び出しにはダミー変数が渡されます。 `threadId` パラメーターが `ref` パラメーター (Visual Basic では`ByRef` ) であった場合、 `BeginInvoke` と `EndInvoke`の両方に渡すことができるように、変数はクラス レベルのフィールドであることが必要です。
- `BeginInvoke` に渡される状態情報は、コールバック メソッドが出力メッセージを書式指定するために使用する書式指定文字列です。 型 として渡されるため、状態情報を使用するには適切な型にキャストする必要があります。
@@ -117,6 +120,6 @@ ms.lasthandoff: 11/21/2017
[!code-csharp[AsyncDelegateExamples#5](../../../samples/snippets/csharp/VS_Snippets_CLR/AsyncDelegateExamples/CS/callback.cs#5)]
[!code-vb[AsyncDelegateExamples#5](../../../samples/snippets/visualbasic/VS_Snippets_CLR/AsyncDelegateExamples/VB/callback.vb#5)]
-## 関連項目
+## 参照
[イベント ベースの非同期パターン (EAP)](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-eap.md)
diff --git a/docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md b/docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md
index 5f0a83b907f..eb533bfbc38 100644
--- a/docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md
+++ b/docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md
@@ -24,245 +24,248 @@ helpviewer_keywords:
- threading [Windows Forms], asynchronous features
- AsyncCompletedEventArgs class
ms.assetid: 61f676b5-936f-40f6-83ce-f22805ec9c2f
-caps.latest.revision: "21"
+caps.latest.revision:
author: dotnet-bot
ms.author: dotnetcontent
manager: wpickett
-ms.openlocfilehash: 150e4b27cc149774895574ddd196de5f9bc2acd8
-ms.sourcegitcommit: 4f3fef493080a43e70e951223894768d36ce430a
+ms.workload:
+- dotnet
+- dotnetcore
+ms.openlocfilehash: 57997b00082fd2068638d83cb828b3fa6fbdfb97
+ms.sourcegitcommit: c0dd436f6f8f44dc80dc43b07f6841a00b74b23f
ms.translationtype: HT
ms.contentlocale: ja-JP
-ms.lasthandoff: 11/21/2017
+ms.lasthandoff: 01/19/2018
---
# チュートリアル : イベントベースの非同期パターンをサポートするコンポーネントの実装
-著しい遅延が発生する可能性がありますをいくつかの操作のクラスを作成している場合は、実装することによって、非同期機能を付けることを検討して、[イベント ベースの非同期パターン概要](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-overview.md)です。
+顕著な遅延が発生する可能性がある操作を伴うクラスを作成する場合は、[イベント ベースの非同期パターン](../../../docs/standard/asynchronous-programming-patterns/event-based-asynchronous-pattern-overview.md)を実装することによって、非同期機能を与えることを検討します。
- このチュートリアルでは、イベント ベースの非同期パターンを実装するコンポーネントを作成する方法について説明します。 ヘルパー クラスを使用して実装されている、コンポーネントが正しく動作する任意のアプリケーション モデルで実行できるようにするには、名前空間を含む[!INCLUDE[vstecasp](../../../includes/vstecasp-md.md)]、コンソール アプリケーションと Windows フォーム アプリケーションです。 また、このコンポーネントは、コントロールや、独自のカスタム デザイナーです。
+ このチュートリアルでは、イベント ベースの非同期パターンを実装するコンポーネントの作成方法を示します。 これは、 名前空間のヘルパー クラスを使用して実装します。これにより、コンポーネントは任意のアプリケーション モデルで正常に動作します ([!INCLUDE[vstecasp](../../../includes/vstecasp-md.md)]、コンソール アプリケーション、Windows フォーム アプリケーションなど)。 また、このコンポーネントは、 コントロールや独自のカスタム デザイナーで設計可能です。
- ときに非同期的に含まれる素数を計算するアプリケーションがあります。 アプリケーションは、主要なユーザー インターフェイス (UI) スレッドと各素数計算のためのスレッドがあります。 多数あるかどうかをテスト素数かなりの時間がかかることができます、この遅延によって、メイン UI スレッドは中断されませんやフォームが応答性の高い計算中にします。 多数の計算は自由に同時に、選択的に取り消しと保留中の計算を実行することができます。
+ このチュートリアルを完了すると、素数を非同期に計算するアプリケーションが作成されます。 アプリケーションには、メイン ユーザー インターフェイス (UI) スレッドと各素数の計算用のスレッドがあります。 大きな数が素数かどうかを調べるにはかなりの時間がかかることがありますが、この遅延によってメイン UI スレッドが中断されることはなく、計算中もフォームは応答性を維持します。 いくつでも好きなだけ計算を同時に実行し、保留中の計算を選択的に取り消すことができます。
このチュートリアルでは、以下のタスクを行います。
- コンポーネントの作成
-- パブリックの非同期イベントおよびデリゲートを定義します。
+- パブリックの非同期イベントとデリゲートの定義
- プライベート デリゲートの定義
-- パブリック イベントを実装します。
+- パブリック イベントの実装
- 完了メソッドの実装
- ワーカー メソッドの実装
-- 開始とキャンセル メソッドの実装
+- 開始メソッドとキャンセル メソッドの実装
- このトピックの「単一のリストとしてコードをコピーするに、を参照してください。[する方法: イベント ベースの非同期パターンをサポートするコンポーネントを実装する](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)です。
+ このトピックのコードを単一のリストとしてコピーするには、「[方法 : イベントベースの非同期パターンをサポートするコンポーネントを実装する](../../../docs/standard/asynchronous-programming-patterns/component-that-supports-the-event-based-asynchronous-pattern.md)」をご覧ください。
## コンポーネントの作成
- 最初の手順では、イベント ベースの非同期パターンを実装するコンポーネントを作成します。
+ 最初に、イベント ベースの非同期パターンを実装するコンポーネントを作成します。
#### コンポーネントを作成するには
-- 呼ばれるクラスを作成する`PrimeNumberCalculator`から継承するです。
+- を継承する `PrimeNumberCalculator` というクラスを作成します。
-## パブリックの非同期イベントおよびデリゲートを定義します。
- コンポーネントは、イベントを使用するクライアントと通信します。 *MethodName* `Completed` 、非同期タスクの完了をクライアントに警告イベント、および*MethodName* `ProgressChanged`イベントは、非同期タスクの進行状況のクライアントに通知します。
+## パブリックの非同期イベントとデリゲートの定義
+ コンポーネントは、イベントを使ってクライアントと通信します。 *MethodName***Completed** イベントは非同期タスクの完了をクライアントに通知し、*MethodName***ProgressChanged** イベントは非同期タスクの進行状況をクライアントに通知します。
-#### コンポーネントのクライアントの非同期イベントを定義します。
+#### コンポーネントのクライアント用の非同期イベントを定義するには:
-1. インポート、とファイルの上部にある名前空間。
+1. ファイルの先頭で および 名前空間をインポートします。
[!code-csharp[System.ComponentModel.AsyncOperationManager#11](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#11)]
[!code-vb[System.ComponentModel.AsyncOperationManager#11](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#11)]
-2. 前に、`PrimeNumberCalculator`クラス定義、進行状況と完了イベントのデリゲートを宣言します。
+2. `PrimeNumberCalculator` クラスの定義の前で、進行状況イベントと完了イベントのデリゲートを宣言します。
[!code-csharp[System.ComponentModel.AsyncOperationManager#7](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#7)]
[!code-vb[System.ComponentModel.AsyncOperationManager#7](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#7)]
-3. `PrimeNumberCalculator`クラス定義、レポートの進行状況および完了をクライアントのイベントを宣言します。
+3. `PrimeNumberCalculator` クラスの定義で、進行状況と完了をクライアントに報告するイベントを宣言します。
[!code-csharp[System.ComponentModel.AsyncOperationManager#8](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#8)]
[!code-vb[System.ComponentModel.AsyncOperationManager#8](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#8)]
-4. 後に、`PrimeNumberCalculator`クラス定義、派生、`CalculatePrimeCompletedEventArgs`のクライアントのイベント ハンドラーをそれぞれの計算の結果を報告のクラス、 `CalculatePrimeCompleted`.event です。 加え、`AsyncCompletedEventArgs`プロパティ、このクラスにより、クライアントは、どの番号がテストされているの主要なであるか、および最初の除数は素がないかどうかを決定します。
+4. `PrimeNumberCalculator` クラスの定義の後で、`CalculatePrimeCompleted` イベントに対するクライアントのイベント ハンドラーに各計算の結果を報告するための `CalculatePrimeCompletedEventArgs` クラスを派生します。 `AsyncCompletedEventArgs` プロパティに加えて、このクラスにより、クライアントはテストされた値、その値が素数かどうか、素数でない場合は最初の約数を知ることができます。
[!code-csharp[System.ComponentModel.AsyncOperationManager#6](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#6)]
[!code-vb[System.ComponentModel.AsyncOperationManager#6](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#6)]
## チェックポイント
- この時点では、コンポーネントをビルドすることができます。
+ この段階で、コンポーネントをビルドすることができます。
#### コンポーネントをテストするには
- コンポーネントをコンパイルします。
- 2 つのコンパイラ警告が表示されます。
+ コンパイラの警告が 2 つ表示されます。
```
warning CS0067: The event 'AsynchronousPatternExample.PrimeNumberCalculator.ProgressChanged' is never used
warning CS0067: The event 'AsynchronousPatternExample.PrimeNumberCalculator.CalculatePrimeCompleted' is never used
```
- 次のセクションでは、これらの警告が消去されます。
+ これらの警告は次のセクションでなくなります。
## プライベート デリゲートの定義
- 非同期の側面、`PrimeNumberCalculator`と呼ばれる特別なデリゲートを使用してコンポーネントを内部的に実装されます、です。 Aで実行されるコールバック メソッドを表す、スレッドです。 コールバック メソッドには、型の 1 つのパラメーターを受け取る署名が必要、することができるはラッパー クラスでデリゲートの間で状態を渡す必要があります。 詳細については、「」を参照してください。
+ `PrimeNumberCalculator` コンポーネントの非同期の側面は、 と呼ばれる特別なデリゲートを使って内部的に実装されます。 は、 スレッドで実行するコールバック メソッドを表します。 コールバック メソッドは、 型のパラメーターを 1 つ受け取るシグネチャを持つ必要があります。つまり、ラッパー クラスでデリゲートに状態を渡す必要があります。 詳細については、「」を参照してください。
-#### コンポーネントの内部の非同期動作を実装するには。
+#### コンポーネントの内部非同期動作を実装するには:
-1. 宣言し、作成、でデリゲート、`PrimeNumberCalculator`クラスです。 作成、ユーティリティ メソッド内のオブジェクトと呼ばれる`InitializeDelegates`です。
+1. `PrimeNumberCalculator` クラスで デリゲートを宣言して作成します。 `InitializeDelegates` という名前のユーティリティ メソッドで オブジェクトを作成します。
- 2 つのデリゲートが必要になります。 クライアントに進行状況をレポート用とクライアントの完了を報告します。
+ 2 つのデリゲートが必要です。1 つはクライアントに進行状況を報告するためのもので、もう 1 つはクライアントに完了を報告するためのものです。
[!code-csharp[System.ComponentModel.AsyncOperationManager#9](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#9)]
[!code-vb[System.ComponentModel.AsyncOperationManager#9](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#9)]
[!code-csharp[System.ComponentModel.AsyncOperationManager#20](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#20)]
[!code-vb[System.ComponentModel.AsyncOperationManager#20](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#20)]
-2. 呼び出す、`InitializeDelegates`コンポーネントのコンス トラクターのメソッドです。
+2. コンポーネントのコンストラクターで `InitializeDelegates` メソッドを呼び出します。
[!code-csharp[System.ComponentModel.AsyncOperationManager#21](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#21)]
[!code-vb[System.ComponentModel.AsyncOperationManager#21](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#21)]
-3. デリゲートを宣言、`PrimeNumberCalculator`を非同期的に実行する実際の作業を処理するクラス。 このデリゲートは、数値が素数かどうかをテストするワーカー メソッドをラップします。 デリゲートは、非同期操作の有効期間を追跡するために使用されるパラメーター。
+3. 実際の処理を非同期に行う `PrimeNumberCalculator` クラスのデリゲートを宣言します。 このデリゲートは、数値が素数かどうかをテストするワーカー メソッドをラップします。 デリゲートは パラメーターを受け取ります。このパラメーターは、非同期操作の有効期間を追跡するために使われます。
[!code-csharp[System.ComponentModel.AsyncOperationManager#22](../../../samples/snippets/csharp/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/CS/primenumbercalculatormain.cs#22)]
[!code-vb[System.ComponentModel.AsyncOperationManager#22](../../../samples/snippets/visualbasic/VS_Snippets_Winforms/System.ComponentModel.AsyncOperationManager/VB/primenumbercalculatormain.vb#22)]
-4. 保留中の非同期操作の有効期間を管理するためのコレクションを作成します。 クライアントでは、この追跡を行うクライアントが非同期メソッドの呼び出しを作成するときに、一意のトークン、またはタスク ID を渡すクライアントを必要として、実行、完了すると、操作を追跡する方法が必要です。 `PrimeNumberCalculator`コンポーネント必要がありますの追跡の各呼び出しの対応する呼び出しと、タスク ID を関連付けることによってです。 クライアントがタスク ID が一意でないことに渡す場合、`PrimeNumberCalculator`コンポーネントが例外を発生させる必要があります。
+4. 保留中の非同期操作の有効期間を管理するためのコレクションを作成します。 クライアントは操作の実行と完了を追跡する手段が必要であり、この追跡は、クライアントが非同期メソッドを呼び出すときに渡す必要のある一意のトークン (タスク ID) を使って行われます。 `PrimeNumberCalculator` コンポーネントは、タスク ID を対応する呼び出しと関連付けることによって、各呼び出しの追跡を維持する必要があります。 クライアントが一意でないタスク ID を渡した場合、`PrimeNumberCalculator` コンポーネントは例外を生成する必要があります。
- `PrimeNumberCalculator`コンポーネントの追跡タスク ID と呼ばれる特別なコレクション クラスを使用して、です。 クラス定義の作成、と呼ばれる`userTokenToLifetime`です。
+ `PrimeNumberCalculator` コンポーネントは、