2017-11-09 9 views
-2

コンパイル行き方:それは、私が1行目と2行目にセミコロンを置くものの次のコードでエラー

Error CS0103 The name 'async' does not exist in the current context in line 1 and 2.

:私は両方の線で非同期を必要とするが、それは次のようなエラーが表示さ

objStockcheck = async ObjPrice.getprice();   
objStockcheck = async ObjAvail.getAvailability(); 

を次のように表示されます。

Error CS1002 ; expected demoservice in line 1 and 2.

ありがとうございます。

+0

私はいくつかの文脈が欠落していると思います。このコードの残りの部分を見ることができますか? –

+0

public class PriceandAvailability { 公開ストリングアカウント{get;セット; }} – priya

+4

これはasyncとawaitの使い方ではありません。私はこのテーマについてもっと読むことをおすすめします。メソッド自体をこの非同期非同期タスクMyMethod()のように非同期としてマークし、別の非同期メソッドで呼び出すことができ、タスクの結果を待つことができます。 MyMethod()を待ちます。これはすべてあなたに慣れていない場合、いくつかを読む必要があります – Dave

答えて

0

@Timothy Grooteが言っているように、文脈はそれほどではありませんが、非同期キーワードはあなたのメソッドの宣言にあるはずです。あなたのメソッドを呼び出すときは、 "await"キーワードを使用するべきです

0

@Devが示唆したように、これは非同期待機を使用する方法ではありません。

まず、非同期メソッドを宣言する必要があります。そして、awaitキーワードを使用して結果を待つか、終了するために呼び出します。

private async void PostToServer(Model Data) 
{ 
    //Do complex task without returning anything. 
    //Like posting data to server. 
    //...Do something with model 
    await context.SaveAsync(); 
} 

async Task<ObjPrice> getprice() 
{ 
    //Do complex task and return result. 
    //Like waiting for some other event to update the price. 
    return await WaitForPriceChangeAsync(); 
} 

public async Task Bar() 
{ 
    var objStockcheck = await WaitForPriceUpdate();   
    await PostToServer(); 
} 

非同期待つここでは詳細読む:

https://docs.microsoft.com/en-us/dotnet/csharp/async

How and When to use `async` and `await`

編集: は、この方法は、他の方法で待望することができ

private async Task<string> RandomTaskAsync() 
{ 
var result=await Task.Run<String>(=> 
    { 
    //Doing any task here will run in asynchronously 
    return HugeComputing(); 
    }); 
    return result; 
} 

非同期タスクの作成コール。

また、Jon Hannaの示唆しているように、イベントハンドラの場合にのみasync voidを使用してください(この場合、代替はありません)。それ以外の場合は、TAP原則に違反します。

+0

PostToServer()やgetprice()が 'await'をしない限り' async'を使う必要はありません。 'bar()'には 'await'が含まれているので' async'が必要で、 'public void async'の理由がない限り' public async Task Bar() 'にする必要があります。かなり単純に、それは 'void 'でなければならないイベントハンドラです。 –

+0

本当に、フル使用量を表示するには、もう1つのメソッドまたはcall.exを実際に追加する必要があります。 PostToServerは、非同期実装を持つdb更新クエリを持つことがあります。 –

+0

あなたは 'Bar()'でこの問題を修正しておらず、 'RandomTaskAsync()'には少なくともコンパイルしても問題はありません。例外的にやや良いスタックトレースを除いてすぐに結果を返すために、 'var result = await ...'を実行することはほとんどありません。タスクを返すほうがいいです。本当に非同期ではない非同期メソッドを作成するために 'Task.Run'を行うことも賢明ではありません。その種の非同期が有用であるかどうか、呼び出し側が本当に知ることができるのは呼び出し元だけで、 'Task.Run'自体を行うことができます。 –

関連する問題