Я использую библиотеку Microsoft Graph API (C #) и задаюсь вопросом, сталкивался ли кто-нибудь с этим:
Время от времени многие из моих API API вызывают тайм-ауты.
Это может произойти с любым вызовом API, от получения текущего профиля пользователя до получения документов sharepoint и т. Д.
Я пытался обновить Microsoft Graph API и зависимые пакеты Nuget до последних версий, но это не помогает.
Для пояснения, это приложение является консольным приложением Windows. На стороне Azure оно зарегистрировано как собственное приложение. Как тестовое приложение, это однопоточное приложение. Нет параллелизма, участвуют условия гонки. Логика кода так же проста, как
- Пользователь входит в систему.
- Программа выполняет вызов API Graph (показанный в примере 1), чтобы получить профиль пользователя, и время ожидания этого вызова API.
например, 1.
var currentUser = graphClient.Me.Request().GetAsync().Result;
например 2.
var site = _graphClient.Sites[SharePointSiteId].Request().GetAsync().Result;
Симптом через одну или две минуты выдает исключение AggregationException (из-за TPL), которое включает исключение TimeOutException.
Нет несанкционированного исключения.
Я хочу знать, что может быть возможной причиной и как мне этого избежать.
UPDATE:
Вот скриншот, когда происходит исключение.
![enter image description here](https://i.stack.imgur.com/pnJKL.png)
ОБНОВЛЕНИЕ 2:
Я попытался заменить все вызовы API, чтобы использовать «await» напрямую, чтобы дождаться результатов. потому что этот пример кода является консольным приложением. Я положил
static void Main(string[] args)
{
// using Stephen Cleary's nuget package: Nito.AsyncEx.Tasks
MainImp().WaitAndUnwrapException();
}
static async Task MainImp()
{
// ...
// Graph API calls
Это исключение все еще вызывается из этого простого вызова API:
var currentUser = await graphClient.Me.Request().GetAsync();
Произошло необработанное исключение типа «Microsoft.Graph.ServiceException» в mscorlib.dll
Дополнительная информация: Код: время ожидания
Вот полный стек вызовов
в Microsoft.Graph.HttpProvider.d__19.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в Microsoft.Graph.HttpProvider.d__18.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в
Microsoft.Graph.BaseRequest.d__35.MoveNext ()
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в Microsoft.Graph.BaseRequest.d__31 1.MoveNext()
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at Microsoft.Graph.UserRequest.<GetAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult ()
в SharePointConsoleApp.Program.d__14.MoveNext () в
D: \ TestProjects \ SharePointConsoleApp \ Program.cs: строка 133
--- Конец стека трассировки из предыдущего места, где было сгенерировано исключение --- в
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task
задача) в
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task
задача) в
Nito.AsyncEx.Synchronous.TaskExtensions.WaitAndUnwrapException (Task
задача) в SharePointConsoleApp.Program.Main (String [] args) в
D: \ TestProjects \ SharePointConsoleApp \ Program.cs: строка 50 в
System.AppDomain._nExecuteAssembly (сборка RuntimeAssembly, String []
аргументы) в System.AppDomain.ExecuteAssembly (String assemblyFile,
Свидетельство сборкиSecurity, String [] args) в
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly ()
в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)
в System.Threading.ExecutionContext.RunInternal (ExecutionContext
executeContext, ContextCallback обратный вызов, состояние объекта, логическое значение
preserveSyncCtx) в
System.Threading.ExecutionContext.Run (ExecutionContext
executeContext, ContextCallback обратный вызов, состояние объекта, логическое значение
preserveSyncCtx) вSystem.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()