SQLiteを使用して自分のアプリケーションにアカウントテーブルを作成しようとしていますが、エラーをスローせずにCreateTableAsync
呼び出し中にアプリケーションがハングします。SQLiteがCreateTablesAsync - Xamarinフォームでハングアップする
LocalDataContext.Instance.CreateTablesAsync(typeof(Account)).Wait();
var account = LocalDataContext.Instance.GetFirstOrDefaultAsync<Account>().Result;
したがって、アプリケーションは最初の呼び出しに入り、2番目の行には到達しません。ここで
はCreateTablesAsync
メソッドのコードです:
/// <summary>
/// Creates the local database tables.
/// </summary>
public async Task CreateTablesAsync(params Type[] tableTypes)
{
await _connection.CreateTablesAsync(tableTypes);
}
これはハングアウトプットの最後の行がFound as 'sqlite3_column_int'.
であり、ここでAccount
モデルです:
public class Account
{
/// <summary>
/// Primary key for record.
/// </summary>
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
/// <summary>
/// Gets or sets the Client ID.
/// </summary>
public string ClientId { get; set; }
/// <summary>
/// Gets or sets the User ID.
/// </summary>
public string UserId { get; set; }
/// <summary>
/// Gets or sets the user password.
/// </summary>
public int Password { get; set; }
}
誰もなぜこれが起こっているのか知っていますか?
タスクを実行し、 'await LocalDataContext.Instance.GetFirstOrDefaultAsync()'を代わりに使用する代わりに、 'Result'を使ってデッドロックする可能性があります。 'Task.Run'を使ってテーブルを作成し、上記のように単純に検索して取得することができます。 http://stackoverflow.com/questions/13140523/await-vs-task-wait-deadlock –