Я получаю ошибку компиляции при попытке преобразовать функцию C # в эквивалент VB.Net.PageAsyncTask в C # ожидает ввода Task, но в VB.Net ищет Func (Of Task).Ни один из онлайн-конвертеров, которые я могу найти, не правильно переводит язык.Ошибка: значение типа «Задача» не может быть преобразовано в «Func (Of Task)»
Не знаю, как поступить (наверное, мне нужно определить событие?).Вот оригинальный код C #
protected void Page_Load(object sender, EventArgs e)
{
{
AsyncMode = true;
if (!dictionary.ContainsKey("accessToken"))
{
if (Request.QueryString.Count > 0)
{
var response = new AuthorizeResponse(Request.QueryString.ToString());
if (response.State != null)
{
if (oauthClient.CSRFToken == response.State)
{
if (response.RealmId != null)
{
if (!dictionary.ContainsKey("realmId"))
{
dictionary.Add("realmId", response.RealmId);
}
}
if (response.Code != null)
{
authCode = response.Code;
output("Authorization code obtained.");
PageAsyncTask t = new PageAsyncTask(performCodeExchange);
Page.RegisterAsyncTask(t);
Page.ExecuteRegisteredAsyncTasks();
}
}
else
{
output("Invalid State");
dictionary.Clear();
}
}
}
}
else
{
homeButtons.Visible = false;
connected.Visible = true;
}
}
}
И во что преобразуется код:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If True Then
AsyncMode = True
If Not dictionary.ContainsKey("accessToken") Then
If Request.QueryString.Count > 0 Then
Dim response = New AuthorizeResponse(Request.QueryString.ToString())
If response.State IsNot Nothing Then
If oauthClient.CSRFToken = response.State Then
If response.RealmId IsNot Nothing Then
If Not dictionary.ContainsKey("realmId") Then
dictionary.Add("realmId", response.RealmId)
End If
End If
If response.Code IsNot Nothing Then
authCode = response.Code
output("Authorization code obtained.")
Dim t As New PageAsyncTask(performCodeExchange)
Page.RegisterAsyncTask(t)
Page.ExecuteRegisteredAsyncTasks()
End If
Else
output("Invalid State")
dictionary.Clear()
End If
End If
End If
Else
homeButtons.Visible = False
connected.Visible = True
End If
End If
End Sub
Проблемная область:
Dim t As New PageAsyncTask(performCodeExchange)
Функция задачи - executeCodeExchange, которая выполняетвозвращает задание
Public Async Function performCodeExchange() As Task
output("Exchanging code for tokens.")
Try
Dim tokenResp = Await oauthClient.GetBearerTokenAsync(authCode)
If Not _dictionary.ContainsKey("accessToken") Then
_dictionary.Add("accessToken", tokenResp.AccessToken)
Else
_dictionary("accessToken") = tokenResp.AccessToken
End If
If Not _dictionary.ContainsKey("refreshToken") Then
_dictionary.Add("refreshToken", tokenResp.RefreshToken)
Else
_dictionary("refreshToken") = tokenResp.RefreshToken
End If
If tokenResp.IdentityToken IsNot Nothing Then
idToken = tokenResp.IdentityToken
End If
If Request.Url.Query = "" Then
Response.Redirect(Request.RawUrl)
Else
Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""))
End If
Catch ex As Exception
output("Problem while getting bearer tokens.")
End Try
End Function
И для полноты, оригинальный код C #:
public async Task performCodeExchange()
{
output("Exchanging code for tokens.");
try
{
var tokenResp = await oauthClient.GetBearerTokenAsync(authCode);
if (!dictionary.ContainsKey("accessToken"))
dictionary.Add("accessToken", tokenResp.AccessToken);
else
dictionary["accessToken"] = tokenResp.AccessToken;
if (!dictionary.ContainsKey("refreshToken"))
dictionary.Add("refreshToken", tokenResp.RefreshToken);
else
dictionary["refreshToken"] = tokenResp.RefreshToken;
if (tokenResp.IdentityToken != null)
idToken = tokenResp.IdentityToken;
if (Request.Url.Query == "")
{
Response.Redirect(Request.RawUrl);
}
else
{
Response.Redirect(Request.RawUrl.Replace(Request.Url.Query, ""));
}
}
catch (Exception ex)
{
output("Problem while getting bearer tokens.");
}
}
Я не уверен, что здесь делать - передать делегата?как это можно сделать с помощью задачи (в VB.Net)?