Многие из моих вызовов Graph API время от времени истекают.
Это может произойти с любым вызовом API, от получения текущего профиля пользователя до получения документов SharePoint и т. д.
Я пробовал обновить Microsoft Graph API и зависимые пакеты Nuget до последних версий, но это не помогает.
Для уточнения: это приложение является консольным приложением Windows. На стороне Azure оно зарегистрировано как собственное приложение. В качестве тестового приложения это однопоточное приложение. Никакого параллелизма, участвуют условия гонки. Логика кода так же проста, как
- Пользователь входит в систему.
- Программа выполняет вызов Graph API (показан на примере 1), чтобы получить профиль пользователя, и время ожидания этого вызова API истекает.
Код: Выделить всё
var currentUser = graphClient.Me.Request().GetAsync().Result;
Код: Выделить всё
var site = _graphClient.Sites[SharePointSiteId].Request().GetAsync().Result;
Нет несанкционированного исключения.
Я хочу знать, что может быть возможной причиной и как этого избежать.
ОБНОВЛЕНИЕ:
Вот снимок экрана, когда возникает исключение.

ОБНОВЛЕНИЕ 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
Код: Выделить всё
var currentUser = await graphClient.Me.Request().GetAsync();
Дополнительная информация: Код: таймаут
Вот полный стек вызовов
в Microsoft.Graph.HttpProvider.d__19.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
Task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
Task) at Microsoft.Graph.HttpProvider.d__18.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task
Task) at
System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task
Task) at
Microsoft.Graph.BaseRequest.d__35.MoveNext()
--- Конец трассировки стека из предыдущего места, где было создано исключение --- at
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.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в SharePointConsoleApp.Program.d__14.MoveNext() в
D:\TestProjects\SharePointConsoleApp\Program.cs:line 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:line 50 в
System.AppDomain._nExecuteAssembly(RuntimeAssembly сборки, String[]
args) в System.AppDomain.ExecuteAssembly(String AssemblyFile,
Evidence AssemblySecurity, String[] args) в
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object) состояние)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта, логическое значение
saveSyncCtx) at
System.Threading.ExecutionContext.Run(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта, логическое значение
saveSyncCtx) в
System.Threading.ExecutionContext.Run(ExecutionContext
ExecutionContext, обратный вызов ContextCallback, состояние объекта) в
System.Threading.ThreadHelper.ThreadStart()
Подробнее здесь: https://stackoverflow.com/questions/564 ... -exception
Мобильная версия