- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
早上好,这是我在社区中的第一个问题。我正在使用 C# WebAPI 框架,我正在尝试将所有 Controller 的方法更改为异步方法。我的 Controller 从 GenericController 扩展而来,它有一个从 DLL 调用方法的方法 (CallWF),它还处理所有类型的异常。
Layer1/Controllers <===> Layer2/GenericController.CallWF <===> Layer3/DLL Methods
这是我的 GenericController.CallWF 代码:
protected IHttpActionResult CallWF<T>(Func<T> action)
{
try
{
return Ok(action.Invoke());
}
catch (Exception e1)
{
return( BadRequest( GetMyExceptionMessage(e1)) );
}
}
protected IHttpActionResult CallWF(Action action)
{
try
{
action.Invoke();
return Ok();
}
catch (Exception e1)
{
return( BadRequest( GetMyExceptionMessage(e1)) );
}
}
这里是一个 Controller 方法的例子。
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public IHttpActionResult MyMethodA(int arg1)
{
return CallWF<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
}
如您所见,该方法是同步的。现在我想把它变成异步的。在阅读了一些解释如何制作异步函数的网站后,这就是我认为的解决方案。
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public async Task<IHttpActionResult> MyMethodA(int arg1)
{
return await CallWF<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
}
但是这样做,会出现如下错误:
CS1061 'IHttpActionResult' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'IHttpActionResult' could be found (are you missing a using directive or an assembly reference?)
尝试另一种方法,我尝试为异步创建一个新的 CallWF 函数。这是制定的方法。
protected async Task<IHttpActionResult> CallWFAsync<T>(Func<T> action)
{
try
{
IHttpActionResult res = Ok( action.Invoke());
return await Ok( action.Invoke() );
}
catch (Exception e1)
{
return ( BadRequest(GetMyExceptionMessage(e1)) );
}
}
这样做,它给了我标题错误。
CS1061 'OkNegotiatedContentResult' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'OkNegotiatedContentResult' could be found (are you missing a using directive or an assembly reference?)
有解决这个问题的想法吗?希望有人能帮助我。
最佳答案
异常消息说明您正在尝试返回不可等待的内容。不需要 await
只需返回 Task
。除非方法中确实需要异步功能,否则您可以使用 Task.FromResult
Task
引用本文:http://blog.stephencleary.com/2012/02/async-and-await.html
Tip: If you have a very simple asynchronous method, you may be able to write it without using the await keyword (e.g., using Task.FromResult). If you can write it without await, then you should write it without await, and remove the async keyword from the method. A non-async method returning Task.FromResult is more efficient than an async method returning a value.
使用您的第一次尝试,它可以重构为...
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public Task<IHttpActionResult> MyMethodA(int arg1) {
var result = CallWF<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
return Task.FromResult(result);
}
在你的第二种方法中,如果你想转换CallWF
方法,你可以使用相同的方法
protected Task<IHttpActionResult> CallWFAsync<T>(Func<T> action) {
IHttpActionResult result = null;
try
{
result = Ok(action.Invoke());
} catch (Exception e1) {
result = BadRequest(GetMyExceptionMessage(e1));
}
return Task.FromResult(result);
}
现在这将允许您通过调用 CallWFAsync
方法来执行第一个示例中尝试执行的操作
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public async Task<IHttpActionResult> MyMethodA(int arg1)
{
return await CallWFAsync<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
}
关于c# - WebAPI : 'IHttpActionResult' does not contain a definition for 'GetAwaiter' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38849321/
我刚用 Latex 写完微积分的总结。 现在的主要问题是文件中包含许多我现在并不真正需要的东西。 .tex 文件包含许多我需要用心学习的定义和定理。 定义在 tex 文件中有自己的定义,因此文件中的任
所以我有一个菜单项列表,我想弄清楚我是否应该使用具有类属性的跨度或每个元素的特征的定义列表。以下是我正在考虑的两个选项: 选项 1) // HAML Markup %article.menu-item
考虑下面的代码,它试图实现 class Bar 的部分特化。 .在第一种情况下,foo成员函数是内联定义的,在第二种情况下是外联的。行外定义产生了一个我无法弄清楚的编译错误:error: out-of
我正在使用 Visual Studio Code 开发一个 typescript 项目,包括多个结构如下的 npm 包: 源代码:/src/index.ts 编译后的代码:/dist/... 当我右键
我正在编写一个神经网络类,遇到了两个我不理解的概念。谁能告诉我bias 和momentum 是什么以及做什么 最佳答案 偏差是给予神经元的恒定输入。例如在普通的前馈网络中,您可能有 2 个输入单元、2
假设我在功能文件中有一个场景,如下所示 Given I log in as "super" user When I click on login Then Home page is displayed
关闭。这个问题是opinion-based 。目前不接受答案。 已关闭去年。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我读了很多这个词
就像几乎任何一个已经编程了一段时间的人一样,我熟悉“生产代码”这个术语,并且对其含义有一个模糊的认识。然而,有人可以提供一个半严格的定义吗,因为维基百科和谷歌似乎不能?在生产中似乎存在很多灰色地带,例
以下代码是我认为符合伪代码条件的示例,因为它不以任何语言执行,但逻辑是正确的。 string checkRubric(gpa, major) bool brake = false nu
从宠物商店示例中获取以下#definition。给定#definition部分,可以生成JSON结构 例如 给定一个较大的复杂JSON文件,是否可以做一些相反的事情? 给定下面的JSON结构,我可以获
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
Joel Spolsky 在 SO 播客中提到了“浮出水面”。 这是什么意思?它是类似于“暴露”的东西吗,比如“暴露接口(interface)”? 最佳答案 这里引用自 podcast 51 的文字记
我不断遇到这个词的用法,但我从来不理解它的用法或所传达的含义。 像...这样的短语 "add semantics for those who read" "HTML5 semantics" "sema
我正在学习 lisp 语言(做 lisp 例程),在一般情况下我知道什么是例程,但在技术上下文中我可以谈论它,因为我现在开始学习例程。那么,例行公事的真正定义是什么?(我已经用谷歌搜索过这个,但没有找
在 definition of the haskell prelude我们看到 ... 是为无法在 Haskell 中实现的表达式保留的。例如,现在 IO monad 无法在 haskell 中实现。
问题: 原来有单个文件tcpclient.c,运行gcc -o tcpclient tcpclient.c可以顺利完成编译,并能与下载到目标板中的tcpserver成功通讯; 现在把tcpclien
我使用 ergoemacs-mode、clojuremode 和自动完成 自动完成效果很好。我应该按什么才能进入函数的定义?我习惯了 Cursive,但我想使用免费的 Emacs,我需要去定义功能。
我对 nearly.js 很陌生,我想知道与规则相比,分词器/词法分析器做了什么,根据网站: By default, nearley splits the input into a stream of
我正在使用 Gforth ,我想在定义中创建一个词。在 Gforth 的 cmd 行中,我可以输入: create foo ok 或者更具体地说,我定义了一个数组函数,它期望堆栈上的大小并创建一个带有
我是一名优秀的程序员,十分优秀!