UPDATE:переменная экземпляра является пустым внутри Task.Run
public MobileServiceUser CurrentMsUser { get; private set; }
У меня есть свойство CurrentMsUser
экземпляр, который заполняется, и я пытаюсь ссылаться на него в методе асинхронным, но по какой-то причине он является недействительным в метод. Я установил точку останова в настройщике свойств, и она никогда не установлена в значение null, поэтому я уверен, что свойство никогда не станет null. После того, как метод async вернет его, он снова появится. Кажется, как только я нахожусь в анонимном асинхронном методе, я не могу получить доступ к свойству. Вот мой метод:
public async Task CreateOrRetrieveAppUserAsync()
{
await Task.Run (async() => {
try {
var usersCollection = await _userTable.ToCollectionAsync();
var users = usersCollection.
Where(x =>
x.FacebookToken == CurrentMsUser.UserId).
ToList();
if (users.Count == 1) {
CurrentRwUser = users [0];
} else {
CurrentRwUser = new User {
FacebookToken = CurrentMsUser.UserId,
GoogleToken = "test",
TwitterToken = "test",
MicrosoftToken = "test",
Email = "[email protected]",
FacebookId = App.FacebookProvider.GetCurrentUserId(),
Name = App.FacebookProvider.GetCurrentUserName()
};
await InsertUserAsync (CurrentRwUser);
await SyncAsync();
}
} catch (Exception ex) {
Debug.WriteLine ("CreateOrRetrieveAppUser failed: {0}", ex.Message);
}
}).ConfigureAwait(continueOnCapturedContext:false);
}
Из любопытства, почему вы завершаете всю эту логику в новой задаче? –
Поскольку метод вызывается из потока пользовательского интерфейса – winnicki
Где * точно * это null? Кажется, это устанавливает значение 'CurrentRwUser', поэтому я бы предположил, что это было null, прежде чем вы вызвали этот метод? Вы говорите, что это все еще null * после * задания? Как вы это определяете? Неверно ли это в 'InsertUserAsync'? Если вы запустили 'Debug.WriteLine (CurrentRwUser.UserId)' в конце этого метода, он выкинул «NullReferenceException»? –