我想在我的调用中使用一个 npm run build
方法,该方法由我的库使用者使用async
调用。但是,尽管我的方法需要在单独的线程上运行,但它的内部工作并不自行调用其他任何await
。
我只是执行方法应该执行的工作并返回类型。并且编译器警告我该方法不会以异步方式运行。
await
另一方面,如果我编写一个使用TaskFactory来启动新任务的方法,如下所示:
public async Task<MyResultObject> DoSomeWork()
{
MyResultObject result = new MyResultObject();
// Some work to be done here
return result;
}
然后我不能使用public Task<MyResultObject> DoSomeWork()
{
return Task<MyResultObject>.Factory.StartNew(() =>
{
MyResultObject result = new MyResultObject();
// Some work to be done here
return result;
});
}
这样的await
关键字来调用它。
如何在不使用某些await DoSomeWork()
调用的情况下编写async
(必须异步并且不执行结果或等待任务)?
答案 0 :(得分:0)
您可以做到
public Task<MyResultObject> DoSomeWork()
{
MyResultObject result = new MyResultObject();
// Some work to be done here
return Task.FromResult(result);
}
与
完全相同public async Task<MyResultObject> DoSomeWork()
{
MyResultObject result = new MyResultObject();
// Some work to be done here
return result;
}
仅此版本发出警告,并且开销稍大。
但是它们都不会在另一个线程上运行。唯一的好处是它们具有一个等待接口。
要并行执行此操作,您的代码还可以,但是Task.Run优于StartNew():
public Task<MyResultObject> DoSomeWork()
{
return Task.Run(() =>
{
MyResultObject result = new MyResultObject();
// Some work to be done here
return result;
});
}
在所有这些情况下,您都可以await DoSomeWork()