簡體   English   中英

什么是創建等效功能的正確方法

[英]What is a proper way to create awaitable function

我對如何真正創造適當的等待功能感到困惑。 我沒有完全理解整個概念,可能是由於語言障礙:)

一種

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();
    });
}

你想要走A路線。 編譯器將負責創建返回的任務並返回實際的整數(如果可用)。

您可以閱讀異步編程 - 暫停和播放...以獲得有關編譯器內部操作的一些詳細深入信息(如何將方法轉換為狀態機)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM