2013-05-13 60 views
5

我有一個接口IAnimation,它公開了一個方法BeginAsync()。該方法應該開始動畫並在完成時返回。什麼也不做的異步方法

我想要做的是實現一個null動畫類NoAnimation,它只是在執行BeginAsync()時返回。

這是正確的實施?

public async Task BeginAsync() 
{ 
    await Task.Run(() => { }); 
} 

我懷疑有一個比這更優雅的方法。我也認爲 創建一個空的方法。但那給了我一個我不喜歡的警告。

+0

相關:[創建一個完成的任務](http://stackoverflow.com/q/14244114/1497596) – DavidRR 2016-05-26 12:09:50

+1

[如果我的界面必須返回任務什麼是最好的方式來做一個無操作的實現? ](http://stackoverflow.com/questions/13127177/if-my-interface-must-return-task-what-is-the-best-way-to-have-a-no-operation-imp) – 2016-11-09 08:23:06

回答

12

只需使用Task.CompletedTask返回一個完成的任務:

public Task BeginAsync() 
{ 
    return Task.CompletedTask; 
} 

如果你有Task<TResult>使用Task.FromResult<TResult>與結果返回一個完成的任務:

public Task<bool> BeginAsync() 
{ 
    return Task.FromResult(true); 
} 

您目前的實現是非常低效的,因爲它構建狀態機,並且還使用ThreadPool線程運行空任務。