2013-04-21 49 views
3

我对如何实际创建适当的等待功能存在两难困境。我不完全得到整个概念,可能是由于语言不通:)什么是创建等待功能的正确方法

一个

public async Task<int> InsertASync(string tableName, Dictionary<string, string> data) 
    { 
     int r = 0; 

     using (SQLiteConnection con = NewConnection()) 
     { 
      await con.OpenAsync(); 
      using (SQLiteCommand com = new SQLiteCommand(Query_Insert(tableName, data), con)) 
      { 
       r = await com.ExecuteNonQueryAsync(); 
      } 
      con.Close(); 
     } 

     return r; 
    } 

public Task<int> InsertASync(string tableName, Dictionary<string, string> data) 
    { 
     return Task<int>.Run(async() => 
      { 
       int r = 0; 

       using (SQLiteConnection con = NewConnection()) 
       { 
        await con.OpenAsync(); 
        using (SQLiteCommand com = new SQLiteCommand(Query_Insert(tableName, data), con)) 
        { 
         r = await com.ExecuteNonQueryAsync(); 
        } 
        con.Close(); 
       } 

       return r; 
      }); 
    } 

原因,我想知道这是因为我通过廉价的方式创建等待方法。

public void DoHeavyWork() //this will block UI 
{ 
    //Do work 
} 

public Task DoHeavyWorkASync() //this won't 
{ 
    return Task.Run(() => 
    { 
     DoHeavyWork(); 
    }); 
} 
+0

备选方案A的一些好深入的信息 - 你的方法定义的,它返回的任务,但在返回语句它只返回int,我想这是一个错误? – Prokurors 2015-02-08 10:49:13

回答

相关问题