- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我必须将应用程序从 ASP.Net Core
重写为 ASP.Net 4.6.1
并且在我发送的应用程序的核心版本中 Json
数据到 BugZilla 进行处理,它工作正常。它发送数据并相当快地得到响应。应用程序 4.6.1 版本中的相同代码位于并卡在发送命令上。我可以进入 BugZilla 并看到它获取了数据并生成了错误,但即使在 15 分钟后应用程序也没有进展。我是 Task 和通过 Json 发送数据的新手,所以我不确定为什么会遇到这个问题。不会返回任何错误,在 Debug模式下,我可以单步执行所有操作,并且知道它正在处理并等待 SendAsync
行。我做错了什么导致 4.6.1 中出现这种情况?
private static async Task<int> LogToBugZilla(string Component, Exception ex)
{
var ErrorSummary = "Auto Error Logging: " + ex.Message + " " + ex.InnerException.Message;
var BugData = new Dictionary<string, string>
{
{ "Bugzilla_api_key", ConfigurationManager.AppSettings["BugZillaAPIKey"] },
{ "product", "Job Site" },
{ "component", Component },
{ "version", ConfigurationManager.AppSettings["AppVersion"] },
{ "summary", ErrorSummary },
{ "op_sys", "All" },
{ "platform", "Other" },
{ "description", ex.StackTrace + ex.InnerException.StackTrace }
};
string Json = JsonConvert.SerializeObject(BugData, Formatting.None);
var Client = new HttpClient();
var Request = new HttpRequestMessage(HttpMethod.Post, "http://bugzilla/rest/bug");
Request.Content = new StringContent(Json, Encoding.UTF8, "application/json");
Request.Headers.Add("Accept", "application/json");
var Response = await Client.SendAsync(Request);
var JsonResults = await Response.Content.ReadAsStringAsync();
if (Response.StatusCode == HttpStatusCode.OK)
{
var Results = JsonConvert.DeserializeObject<Dictionary<string, int>>(JsonResults);
return Results["id"];
}
else
{
return -1;
}
}
编辑:
public static string ProcessError(Exception ex, string OriginatingController)
{
var Component = GetComponent(OriginatingController);
string UserErrorMessage = "";
switch (ex.GetType().ToString())
{
case "System.Data.DataException":
LogToITSupport("Database Connection");
UserErrorMessage = @"An error has accrued connecting to the database. <a href=""mailto:"">IT Support</a> has been notified of this error. Please try your request again later, thank you.";
break;
default:
var BugID = LogToBugZilla(Component, ex).Result;
UserErrorMessage = @"An error has accrued processing your request and a log of this error has been made on the <a href=""http://bugzilla/show_bug.cgi?id=" + BugID + "\">Internal Tools BugZilla system</a> with an ID of " + BugID + ". Please try your request again later, thank you.";
break;
}
return UserErrorMessage;
}
重申一下,应用程序卡在代码 var Response = await Client.SendAsync(Request);
编辑 2:
Controller 代码:
public ActionResult About()
{
try
{
using (var db = new JobSightDbContext())
{
var model = db.ReleaseVersions
.OrderByDescending(rv => rv.DateReleased)
.Select(rv => new ReleaseNotesVM()
{
ID = rv.ID,
CurrentVersion = string.Concat(rv.Major, ".", rv.Minor, ".", rv.Patch),
CurrentVersionReleaseDate = rv.DateReleased,
ReleaseNotes = rv.ReleaseNotes.Select(rn => rn.Note).ToList()
}).First();
//model.VersionList = db.ReleaseVersions
// .OrderByDescending(rv => rv.DateReleased)
// .Select(rv => new SelectListItem()
// {
// Value = rv.ID.ToString(),
// Text = string.Concat(rv.Major, '.', rv.Minor, '.', rv.Patch)
// }).ToList();
return View(model);
}
}
catch (System.Data.DataException ex)
{
ViewBag.ErrorMessage = EHALM.ProcessError(ex, RouteData.Values["controller"].ToString());
return View("Dashboard");
}
}
最佳答案
我要在这里跛行并说你使用 LogToBugZilla
在你的调用堆栈中像这样:
public void DoStuff()
{
var result = LogToBugZilla("Component", exception).Result;
}
这实际上会使您的代码陷入僵局,这也是 you shouldn't block on async code 的原因。 .你需要让你的代码“一直异步”,直到你的调用堆栈的顶部。这意味着转 DoStuff
至 DoStuffAsync
并这样调用它:
public async Task DoStuffAsync()
{
var result = await LogToBugZillaAsync("Component", exception);
// Do stuff with result
}
请注意,我在 LogToBugZilla
中添加了“async”后缀,按照推荐的编码约定。
编辑:
鉴于您提供了调用方法,它应该如下所示:
public static async Task<string> ProcessErrorAsync(
Exception ex, string OriginatingController)
{
var Component = GetComponent(OriginatingController);
string UserErrorMessage = "";
switch (ex.GetType().ToString())
{
case "System.Data.DataException":
LogToITSupport("Database Connection");
UserErrorMessage = @"An error has accrued connecting to the
database. <a href=""mailto:"">IT Support</a> has been notified
of this error. Please try your request again later, thank you.";
break;
default:
var bugId = await LogToBugZillaAsync(Component, ex);
UserErrorMessage = @"An error has accrued processing your request
and a log of this error has been made
on the <a href=""http://bugzilla/show_bug.cgi?id=" + BugID +
"\">Internal Tools BugZilla system</a>
with an ID of " + bugId + ". Please try your request again later, thank you.";
break;
}
return UserErrorMessage;
}
现在请记住,这需要一直向上。这意味着每个方法调用 ProcessErrorAsync
, 本身应该是async
并返回 Task
或 Task<T>
.
关于c# - HttpClient.SendAsync 停滞不前,即使发送的数据已处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35364992/
我在本地使用 git。在一个目录中,我们称之为项目,我初始化了一个 git 存储库。当我创建/修改文件时,我使用了“git add file”和“git commit”。这些文件现在变成了两个看似独立
我们正在尝试运行 Web-Component-tester,但它在 Selenium 步骤上一直停滞不前。 当我运行wct -l chrome --verbose 我得到以下内容 hook: prep
我必须将应用程序从 ASP.Net Core 重写为 ASP.Net 4.6.1 并且在我发送的应用程序的核心版本中 Json 数据到 BugZilla 进行处理,它工作正常。它发送数据并相当快地得到
用例: 我有一个可用的 NFS 目录,我想用它来为多个部署和 pod 保存数据。 我创建了一个 PersistentVolume : apiVersion: v1 kind: PersistentVo
我正在使用 Tornado 以快速、周期性的连续(每 0.1 秒甚至 0.01 秒)向服务器发送请求。为此,我使用带有回调的 AsyncHttpClient.fetch 来处理响应。这是一个非常简单的
我有两种类型的灰度图像,比如汽车和飞机。在我的训练集中,我有 1000 张图像(大约 50/50 分割)。在这个训练集中,我所有的飞机示例都在白色背景上,而所有汽车示例都在黑色背景上(这是故意的,模型
我是一名优秀的程序员,十分优秀!