Если у вас есть нижняя граница (3) и верхняя граница regexString может быть сгенерирована следующим образом
public class RegexBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
int seqStart = 3;
int seqEnd = 5;
buildRegex(sb, seqStart, seqEnd);
System.out.println(sb);
}
private static void buildRegex(StringBuilder sb, int seqStart, int seqEnd) {
for (int i = seqStart; i <= seqEnd; i++) {
buildRegexCharGroup(sb, i, '0', '9');
buildRegexCharGroup(sb, i, 'A', 'Z');
buildRegexCharGroup(sb, i, 'a', 'z');
buildRegexRepeatedString(sb, i);
}
}
private static void buildRegexCharGroup(StringBuilder sb, int seqLength,
char start, char end) {
for (char c = start; c <= end - seqLength + 1; c++) {
char ch = c;
if (sb.length() > 0) {
sb.append('|');
}
for (int i = 0; i < seqLength; i++) {
sb.append(ch++);
}
}
}
private static void buildRegexRepeatedString(StringBuilder sb, int seqLength) {
sb.append('|');
sb.append("([a-zA-Z\\d])");
for (int i = 1; i < seqLength; i++) {
sb.append("\\1");
}
}
}
Выход
012|123|234|345|456|567|678|789|ABC|BCD|CDE|DEF|EFG|FGH|GHI|HIJ|IJK|JKL|KLM|LMN|MNO|NOP|OPQ|PQR|QRS|RST|STU|TUV|UVW|VWX|WXY|XYZ|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz|([a-z\d])\1\1|0123|1234|2345|3456|4567|5678|6789|ABCD|BCDE|CDEF|DEFG|EFGH|FGHI|GHIJ|HIJK|IJKL|JKLM|KLMN|LMNO|MNOP|NOPQ|OPQR|PQRS|QRST|RSTU|STUV|TUVW|UVWX|VWXY|WXYZ|abcd|bcde|cdef|defg|efgh|fghi|ghij|hijk|ijkl|jklm|klmn|lmno|mnop|nopq|opqr|pqrs|qrst|rstu|stuv|tuvw|uvwx|vwxy|wxyz|([a-z\d])\1\1\1|01234|12345|23456|34567|45678|56789|ABCDE|BCDEF|CDEFG|DEFGH|EFGHI|FGHIJ|GHIJK|HIJKL|IJKLM|JKLMN|KLMNO|LMNOP|MNOPQ|NOPQR|OPQRS|PQRST|QRSTU|RSTUV|STUVW|TUVWX|UVWXY|VWXYZ|abcde|bcdef|cdefg|defgh|efghi|fghij|ghijk|hijkl|ijklm|jklmn|klmno|lmnop|mnopq|nopqr|opqrs|pqrst|qrstu|rstuv|stuvw|tuvwx|uvwxy|vwxyz|([a-z\d])\1\1\1\1
Когда вы делаете async
/ await
, вы в основном хотите, чтобы все (большинство) ваших методов работали в async
/ await
. На данный момент вы смешиваете асинхронные и не асинхронные вызовы методов. Это называется блокировкой в контексте async
, и его следует избегать , не в последнюю очередь из-за того, что это может привести к тупикам. Я бы посоветовал вам прочитать Async / Await - Best Practices в асинхронном программировании
В целом (и для некоторого упрощения проблемы) все ваши методы должны иметь подпись
public async Task method()
{
}
и всех , которые должны вызываться вашими методами:
await method();
private async void startDistanceMonitoring()
Никогда не используйте async void
(это только для асинхронных обработчиков событий)
private void Sleep(int NoOfMs)
{
Task.Delay(NoOfMs).Wait();
}
это блокировка, это должно быть
private async Task Sleep(int NoOfMs)
{
await Task.Delay(NoOfMs);
}
Когда вы звоните:
[ 115] startDistanceMonitoring
- это метод async
, но вы его не ожидаете. Так что ваша программа может очень хорошо завершиться, прежде чем она будет завершена. Это должно быть:
await startDistanceMonitoring();
Вы делаете это неправильно во всем этом блоке кода. Всегда вызывайте методы async
с await
.
Ваш метод ввода не async
, public void Run(IBackgroundTaskInstance taskInstance)
должен быть public async Task Run(IBackgroundTaskInstance taskInstance)