【发布时间】:2019-01-11 18:59:14
【问题描述】:
我有以下使用 System.Threading.Tasks.Task 类的 C# 方法。
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(Content);
response.RequestMessage = Request;
return Task.FromResult(response);
}
我在 VB.Net 中编写上述代码时遇到了一些问题。我尝试了以下方法,但 VS 2107 在下面函数的最后一行显示错误 FromResult is not a member of Task。
问题:对于 C# 方法的最后一行,VB.Net 中 C# 代码的正确等效项是什么?
Public Async Function ExecuteAsync(ByVal cancellationToken As CancellationToken) As Task(Of HttpResponseMessage)
Dim response As HttpResponseMessage = New HttpResponseMessage(HttpStatusCode.InternalServerError)
response.Content = New StringContent(Content)
response.RequestMessage = Request
Return Task.FromResult(Of HttpResponseMessage) (response) 'this line shows error
End Function
错误截图
包含此原始方法的完整 C# 类如下。
public class GlobalExceptionHandler : ExceptionHandler
{
public GlobalExceptionHandler()
{
//
// TODO: Add constructor logic here
//
}
public override void Handle(ExceptionHandlerContext context)
{
context.Result = new TextPlainErrorResult
{
Request = context.ExceptionContext.Request,
Content = "Oops! Sorry! Something went wrong." +
"Our team has been informed and we will try to fix it as soon as possible."
};
base.Handle(context);
}
private class TextPlainErrorResult : IHttpActionResult
{
public HttpRequestMessage Request { get; set; }
public string Content { get; set; }
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response =
new HttpResponseMessage(HttpStatusCode.InternalServerError);
response.Content = new StringContent(Content);
response.RequestMessage = Request;
return Task.FromResult(response);
}
}
}
以上C#代码转换后的VB.Net代码如下。
Public Class GlobalExceptionHandler
Inherits ExceptionHandler
Public Sub New()
End Sub
Public Overrides Sub Handle(ByVal context As ExceptionHandlerContext)
context.Result = New TextPlainErrorResult With {
.Request = context.ExceptionContext.Request,
.Content = "Oops! Sorry! Something went wrong." & "Our team has been informed and we will try to fix it as soon as possible."
}
MyBase.Handle(context)
End Sub
Private Class TextPlainErrorResult
Implements IHttpActionResult
Public Property Request As HttpRequestMessage
Public Property Content As String
Public Function ExecuteAsync(ByVal cancellationToken As CancellationToken) As Task(Of HttpResponseMessage)
Dim response As HttpResponseMessage = New HttpResponseMessage(HttpStatusCode.InternalServerError)
response.Content = New StringContent(Content)
response.RequestMessage = Request
Return new Task.FromResult(response)
End Function
End Class
End Class
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c# vb.net visual-studio-2017