隐含的等待?

时间:2015-05-30 19:36:07

标签: c# asynchronous async-await

我有一个方法Create

public async Task<MyObject> Create(string str1, string str2)
{
    // Check to see if a MyObject can be created in the database.
    if (!await CanCreate(str1, str2))
    {
        return null;
    }

    // Create the object.
    var myObj = new MyObject
    {
        Created = DateTime.Now.Date,
        First = str1,
        Second = str2
    };

    // Log this event.
    _loggingService.Log(myObj, LogType.Created);

    // Return the created MyObject.
    return _repository.CreateAsync(myObj));
}

方法CanCreate(string, string)会返回Task<bool>

方法Log(MyObject, LogType)会返回Task

方法CreateAsync(MyObject)会返回Task<MyObject>

请注意,CanCreateLog都没有等待CreateAsync。那么,在我的例子中,当Create返回并等待时,我的问题是:

 var result = await _service.Create("abc", "def");

Log等待电话时还等待Create

2 个答案:

答案 0 :(得分:1)

  

是否等待来自Create?

的等待

不,不是。 Log将通过,它将生成的封装任务将被忽略(以及它传播的任何异常)。因为您最终会从CreateAsync返回任务,所以我们将等待您。

答案 1 :(得分:0)

不,https://github.com/<username>/<reponame>.git 方法无法等待。

当您在没有Log关键字的情况下调用async方法时,会发生的情况是该方法被调用,但原始线程不会等待&#34;等待&#34;它完成。它通常被称为await

通常情况下,fire and forget所有await方法最好,但这取决于具体情况。