2016-11-17 16 views
0

コントローラとサービス層を設定して、非同期とタスクを使用しないようにしました。コードを更新しました(下記)。これはasync、Task、およびawaitを使用する正しい方法ですか?ユーザー数が増えるにつれ、私のコードは長期的に利益を得ることができますか?WebAPI2とEntity Framework 6と.Net 4.6での非同期の使用

コントローラー:

public async Task<IHttpActionResult> All() 
{ 
    var warmup = await _warmupService.GetAllAsync(); 

    if (warmup != null) 
     return Ok(warmup); 

    return NotFound(); 
} 

[コントローラは、私のサービス層では、このメソッドを呼び出します(また、サービス中)

public async Task<Warmup> GetAllAsync() 
{    
    return await Task.Run(() => GetWarmup()); 
} 

GetWarmup()EF6を使用してDB呼び出しを行います

private Warmup GetWarmup() 
{ 
    var warmup = new Warmup(); 

    var factoryTools = _db.FactoryTools.Select(tool => new { tool.Factory }); 
} 
+0

あなたは正しいかどうか尋ねていますか?あなたがそれを実行するとどうなりますか?それは動作しますか? – Amy

答えて

1

これを行う最良の方法ではありません。可能であれば、基になるコードがTaskまたはTask<T>の場合はTask.Runを使用しないでください。代わりに、コード

public async Task<Warmup> GetAllAsync() 
{    
    return await Task.Run(() => GetWarmup()); 
} 

、これを使用してのこの作品にTask.Runを使用しての

private Warmup GetWarmup() 
{ 
    var warmup = new Warmup(); 

    var factoryTools = _db.FactoryTools.Select(tool => new { tool.Factory }); 
} 

あなたがここにデモのようなエンティティフレームワークが提供するネイティブの非同期メソッドを使用する必要がありますhttps://msdn.microsoft.com/en-us/library/jj819165(v=vs.113).aspx

GetWarmUp()async Task<Warmup>()で、Entのネイティブ非同期メソッドの1つを呼び出す必要がありますフレームワーク。

利用可能な非同期拡張メソッドのリストについては、https://msdn.microsoft.com/en-us/library/system.data.entity.queryableextensions(v=vs.113).aspxを参照してください。

関連する問題