我有一个方法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>
。
请注意,CanCreate
和Log
都没有等待CreateAsync
。那么,在我的例子中,当Create
返回并等待时,我的问题是:
var result = await _service.Create("abc", "def");
在Log
等待电话时还等待Create
。
答案 0 :(得分:1)
是否等待来自Create?
的等待
不,不是。 Log
将通过,它将生成的封装任务将被忽略(以及它传播的任何异常)。因为您最终会从CreateAsync
返回任务,所以我们将等待您。
答案 1 :(得分:0)
不,https://github.com/<username>/<reponame>.git
方法无法等待。
当您在没有Log
关键字的情况下调用async
方法时,会发生的情况是该方法被调用,但原始线程不会等待&#34;等待&#34;它完成。它通常被称为await
。
通常情况下,fire and forget
所有await
方法最好,但这取决于具体情况。