Асинхронные методы Atlassian.NET SDK не генерируют исключения - PullRequest
0 голосов
/ 29 августа 2018

Edit:

private void button1_Click(object sender, EventArgs e) {
 string summary = "TestSummary";
 string description = "TestDescription";
 string type = "Task";
 string projectKey = "TST";
 string priority = "p - 3";

 var issueCreated = createIssueWrapper(summary, description, type, priority, projectKey).Result;
}

public async Task <string> createIssueWrapper(string summary, string description, string type, string priority, string projectKey) {
 string returnVal = "";

 returnVal = await createIssue(summary, description, type, priority, projectKey);

 return returnVal;

}

public async Task <string> createIssue(string summary, string description, string type, string priority, string projectKey) {
 string returnVal = "";

 try {
  var issue = jira.CreateIssue(projectKey);
  issue.Type = type;
  issue.Priority = priority;
  issue.Summary = summary;
  issue.Description = description;

  var jiraIssue = await issue.SaveChangesAsync();

  if (jiraIssue != null) {
   returnVal = jiraIssue.Key.ToString();
  }

 } 
 catch (Exception ex) {
  returnVal = "There was a problem creating the issue. Please try again.";
 }

 return returnVal;

}

Я пытался выяснить, почему асинхронные методы Atlassian.NET Jira не возвращают исключения, как их обычные (не асинхронные) методы.

В качестве примера я вызываю асинхронный метод createIssue, чтобы создать новую проблему Jira, например:

string summary = "TestIssue";
string description = "TestDescription";
string type = "Task";
string projectKey = "TST";
string priority = "p - 3";

Task<string> created = createIssue(summary, description, type, priority, projectKey);

Вот асинхронный метод:

public async Task<string> createIssue(string summary, string description, string type, string priority, string projectKey)
{
    string key = "";

    try
    {
        var issue = jira.CreateIssue(projectKey);
        issue.Type = type;
        issue.Priority = priority;
        issue.Summary = summary;
        issue.Description = description;

        var jiraIssue = await issue.SaveChangesAsync();

        if (jiraIssue != null)
        {
            key = jiraIssue.Key.ToString();
        }        
    }
    catch (Exception ex)
    {

    }    
    return key;
}

Я добавил точку останова на линии await issue.SaveChangesAsync() и перешагнул через нее. Никаких исключений не выдается, поэтому код продолжает ждать завершения вызова. Ничто не говорит мне, что есть проблема.

Итак, я преобразовал метод createIssue в не асинхронный:

var issue = jira.CreateIssue(projectKey);
issue.Type = type;
issue.Priority = priority;
issue.Summary = summary;
issue.Description = description;

issue.SaveChanges();

Здесь я получаю исключение, сообщающее мне о фактической проблеме:

{"Объект с идентификатором" и именем "p - 3" не найден для типа "Atlassian.Jira.IssuePriority". Доступно: [10000: p-3,10001: N / A, 4: p-4 , 3: р-2,2: 1,1-р: п-0] "}

Можно ли отлавливать эти типы исключений в методах Async? Нужно ли создавать обработчик или делать что-то еще?

1 Ответ

0 голосов
/ 29 августа 2018

Вы случайно создали тупик, заблокировав ваш поток пользовательского интерфейса с помощью .Result.

См. Эту статью MSDN для обсуждения.

Измените обработчик кнопки на асинхронный и используйте в этом ожидании. Также удалите createIssueWrapper - вам это не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...